您的当前位置:首页正文

mysqldump备份及数据还原

2023-11-10 来源:帮我找美食网

建议使用在10g以下的数据进行备份,是mysql数据库的逻辑备份

mysqldump 指令介绍-A 所有表  —all-databases-B   --databases   db1 db2 ...: 备份指定的多个库,同时创建库(不能跟A同时使用)-x 锁表   --lock-all-tables    请求锁定所有表之后再备份,对MyISAM、InnoDB、Aria做温备--single-transaction: 能够对InnoDB存储引擎实现热备;(要确定表是innodb   跟锁表不能同时使用)--flush-logs: 备份前、请求到锁之后滚动日志; 恢复时候用数据加滚动后的二进制日志复制时的同步位置标记: --master-data=[0|1|2] (0: 不记录 )( 1:记录为CHANGE MASTER语句)( 2:记录为注释的CHANGE MASTER语句)备份代码:            --events: 备份事件调度器代码            --routines: 备份存储过程和存储函数            --triggers:备份触发器建议:关闭二进制日志,关闭其它用户连接;

手动锁表备份:

mysql> flush tables with read lock;mysql> flush logs;mysql> show master status;+-------------------+----------+--------------+------------------+-------------------+| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+-------------------+----------+--------------+------------------+-------------------+| master-bin.000004 |      120 |              |                  |                   |+-------------------+----------+--------------+------------------+-------------------+#mysql> insert into t3 (id,data) values(2,‘22‘);#ERROR 1223 (HY000): Can‘t execute the query because you have a conflicting read lock[root@martin ~]# mysqldump -hlocalhost -uroot -p  -B martin   > a.sqlmysql> unlock tables;

自动备份:

[root@martin ~]# mysqldump -hlocalhost -uroot -p  -B martin  -x --flush-logs --master-data=2 > a.sql[root@martin ~]# cat a.sql -- CHANGE MASTER TO MASTER_LOG_FILE=‘master-bin.000005‘, MASTER_LOG_POS=120;---- Current Database: `martin`--CREATE DATABASE /*!32312 IF NOT EXISTS*/ `martin` /*!40100 DEFAULT CHARACTER SET latin1 */;USE `martin`;mysql> show master status;+-------------------+----------+--------------+------------------+-------------------+| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+-------------------+----------+--------------+------------------+-------------------+| master-bin.000005 |      120 |              |                  |                   |+-------------------+----------+--------------+------------------+-------------------+

还原:

模拟备份之后添加数据:

mysql> CREATE TABLE IF NOT EXISTS `t1` (    ->   `id` varchar(32) NOT NULL,    ->   `data` text NOT NULL ,    ->   `expire` int(11)  NOT NULL DEFAULT ‘0‘,    ->   PRIMARY KEY (`id`)    -> ) ENGINE=MyISAM DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.00 sec)mysql> insert into t1 (id,data) values(2,‘22‘);Query OK, 1 row affected (0.00 sec)mysql> show master status;+-------------------+----------+--------------+------------------+-------------------+| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+-------------------+----------+--------------+------------------+-------------------+| master-bin.000005 |      927 |              |                  |                   |+-------------------+----------+--------------+------------------+-------------------+

数据丢失

mysql> drop database martin;Query OK, 2 rows affected (0.00 sec)[root@martin local]# service mysqld stopShutting down MySQL.. SUCCESS!

查看数据:

[root@martin local]# cd /mydata/mysql/log-bin/[root@martin log-bin]# mysqlbinlog --start-position=120   master-bin.000005/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;/*!40019 SET @@session.max_insert_delayed_threads=0*/;/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;DELIMITER /*!*/;# at 4#160524 15:29:25 server id 1  end_log_pos 120 CRC32 0xa1962627 Start: binlog v 4, server v 5.6.30-log created 160524 15:29:25BINLOG ‘1QJEVw8BAAAAdAAAAHgAAAAAAAQANS42LjMwLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAScmlqE=‘/*!*/;# at 120#160524 15:32:29 server id 1  end_log_pos 249 CRC32 0x74e33ea9 Querythread_id=2exec_time=0error_code=0use `martin`/*!*/;SET TIMESTAMP=1464075149/*!*/;SET @@session.pseudo_thread_id=2/*!*/;SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;SET @@session.sql_mode=1075838976/*!*/;SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;/*!C latin1 *//*!*/;SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;SET @@session.lc_time_names=0/*!*/;SET @@session.collation_database=DEFAULT/*!*/;DROP TABLE IF EXISTS `t1` /* generated by server *//*!*/;# at 249#160524 15:32:40 server id 1  end_log_pos 378 CRC32 0x7ae6077a Querythread_id=2exec_time=0error_code=0SET TIMESTAMP=1464075160/*!*/;DROP TABLE IF EXISTS `t1` /* generated by server *//*!*/;# at 378#160524 15:32:40 server id 1  end_log_pos 643 CRC32 0x10173878 Querythread_id=2exec_time=0error_code=0SET TIMESTAMP=1464075160/*!*/;CREATE TABLE IF NOT EXISTS `t1` (  `id` varchar(32) NOT NULL,  `data` text NOT NULL ,  `expire` int(11)  NOT NULL DEFAULT ‘0‘,  PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8/*!*/;# at 643#160524 15:32:54 server id 1  end_log_pos 726 CRC32 0xad187d7d Querythread_id=2exec_time=0error_code=0SET TIMESTAMP=1464075174/*!*/;BEGIN/*!*/;# at 726#160524 15:32:54 server id 1  end_log_pos 843 CRC32 0x861ba6b0 Querythread_id=2exec_time=0error_code=0SET TIMESTAMP=1464075174/*!*/;insert into t1 (id,data) values(2,‘22‘)/*!*/;# at 843#160524 15:32:54 server id 1  end_log_pos 927 CRC32 0xa1a5bf4a Querythread_id=2exec_time=0error_code=0SET TIMESTAMP=1464075174/*!*/;COMMIT/*!*/;# at 927#160524 15:35:30 server id 1  end_log_pos 1025 CRC32 0x77d2ec0e Querythread_id=2exec_time=0error_code=0SET TIMESTAMP=1464075330/*!*/;drop database martin/*!*/;# at 1025#160524 15:37:18 server id 1  end_log_pos 1048 CRC32 0xb1a3e339 StopDELIMITER ;# End of log fileROLLBACK /* added by mysqlbinlog */;/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

找到  at 927 恢复数据到drop之前

[root@martin log-bin]# mysqlbinlog --start-position=120  --stop-position=927  master-bin.000005>~/a.bin.sql

连接mysql:唯一连入保证数据唯一:

mysql> set session sql_log_bin=0;mysql> source ~/a.sqlmysql> source ~/a.bin.sqlmysql> set session sql_log_bin=1;mysql> show tables;+------------------+| Tables_in_martin |+------------------+| t1               || t3               |+------------------+

over

mysqldump备份及数据还原

标签:mysqldump mysql 二进制日志

小编还为您整理了以下内容,可能对您也有帮助:

如何用mysql命令备份和恢复

Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下面为大家分享一下操作的常用的命令。
一、备份命令
1、备份MySQL数据库的命令
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp-hhostname-uusername-ppassword databasename>backupfile.sql
2、备份MySQL数据库为带删除表的格式
备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp-–add-drop-table-uusername-ppassword databasename>backupfile.sql
3、直接将MySQL数据库压缩备份
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp-hhostname-uusername-ppassword databasename|gzip>backupfile.sql.gz
4、备份MySQL数据库某个(些)表
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp-hhostname-uusername-ppassword databasename specific_table1 specific_table2>backupfile.sql
5、同时备份多个MySQL数据库
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp-hhostname-uusername-ppassword –databases databasename1 databasename2 databasename3>multibackupfile.sql
6、仅仅备份数据库结构
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp –no-data –databases databasename1 databasename2 databasename3>structurebackupfile.sql
7、备份服务器上所有数据库
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp –all-databases>allbackupfile.sql
二、还原命令
1、还原MySQL数据库的命令
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysql-hhostname-uusername-ppassword databasename<backupfile.sql
2、还原压缩的MySQL数据库
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  gunzip<backupfile.sql.gz|mysql-uusername-ppassword databasename
3、将数据库转移到新服务器
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp-uusername-ppassword databasename|mysql –host=*.*.*.*-C databasename
总结
做好数据备份和还原,定好合适的备份策略,这是一个DBA所做事情的一小部分,万事开头难,就从现在开始吧!

如何用mysql命令备份和恢复

Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命令,让它去执行,才能完成Mysql数据库备份和还原的操作,下面为大家分享一下操作的常用的命令。
一、备份命令
1、备份MySQL数据库的命令
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp-hhostname-uusername-ppassword databasename>backupfile.sql
2、备份MySQL数据库为带删除表的格式
备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp-–add-drop-table-uusername-ppassword databasename>backupfile.sql
3、直接将MySQL数据库压缩备份
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp-hhostname-uusername-ppassword databasename|gzip>backupfile.sql.gz
4、备份MySQL数据库某个(些)表
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp-hhostname-uusername-ppassword databasename specific_table1 specific_table2>backupfile.sql
5、同时备份多个MySQL数据库
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp-hhostname-uusername-ppassword –databases databasename1 databasename2 databasename3>multibackupfile.sql
6、仅仅备份数据库结构
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp –no-data –databases databasename1 databasename2 databasename3>structurebackupfile.sql
7、备份服务器上所有数据库
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp –all-databases>allbackupfile.sql
二、还原命令
1、还原MySQL数据库的命令
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysql-hhostname-uusername-ppassword databasename<backupfile.sql
2、还原压缩的MySQL数据库
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  gunzip<backupfile.sql.gz|mysql-uusername-ppassword databasename
3、将数据库转移到新服务器
<!--
Code highlighting proced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->  mysqlmp-uusername-ppassword databasename|mysql –host=*.*.*.*-C databasename
总结
做好数据备份和还原,定好合适的备份策略,这是一个DBA所做事情的一小部分,万事开头难,就从现在开始吧!

mysql中备份和还原数据库的语句什么啊

一、Mysql数据库备份指令格式:
mysqlmp -h主机名 -P端口 -u用户名 -p密码 (–database) 数据库名 > 文件名.sql
注:直接cmd执行该指令即可,不需要先mysql -u root -p链接数据库
1、备份MySQL数据库的命令
mysqlmp -hhostname -uusername -ppassword databasename > backupfile.sql
2、备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
mysqlmp -–add-drop-table -uusername -ppassword databasename > backupfile.sql
二、数据库还原有三种方式:source命令、mysql、gunzip命令
1、source 命令
进入mysql数据库控制台,
mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source /home/work/db/bkdb.sql
2、mysql
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
3、gunzip
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename

mysql中备份和还原数据库的语句什么啊

一、Mysql数据库备份指令格式:
mysqlmp -h主机名 -P端口 -u用户名 -p密码 (–database) 数据库名 > 文件名.sql
注:直接cmd执行该指令即可,不需要先mysql -u root -p链接数据库
1、备份MySQL数据库的命令
mysqlmp -hhostname -uusername -ppassword databasename > backupfile.sql
2、备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
mysqlmp -–add-drop-table -uusername -ppassword databasename > backupfile.sql
二、数据库还原有三种方式:source命令、mysql、gunzip命令
1、source 命令
进入mysql数据库控制台,
mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source /home/work/db/bkdb.sql
2、mysql
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
3、gunzip
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename

MySQL数据库备份和还原的常用命令?

1.备份MySQL数据库的命令

mysqlmp-hhostname-uusername-ppassworddatabasename>backupfile.sql

2.备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。

mysqlmp-_add-drop-table-uusername-ppassworddatabasename>backupfile.sql

3.直接将MySQL数据库压缩备份

mysqlmp-hhostname-uusername-ppassworddatabasename|gzip>backupfile.sql.gz

4.备份MySQL数据库某个(些)表

mysqlmp-hhostname-uusername-ppassworddatabasenamespecific_table1specific_table2>backupfile.sql

5.同时备份多个MySQL数据库

mysqlmp-hhostname-uusername-ppassword_databasesdatabasename1databasename2databasename3>multibackupfile.sql

6.仅仅备份数据库结构

mysqlmp_no-data_databasesdatabasename1databasename2databasename3>structurebackupfile.sql

7.备份服务器上所有数据库

mysqlmp_all-databases>allbackupfile.sql

8.还原MySQL数据库的命令

mysql-hhostname-uusername-ppassworddatabasename<backupfile.sql

9.还原压缩的MySQL数据库

gunzip<backupfile.sql.gz|mysql-uusername-ppassworddatabasename

10.将数据库转移到新服务器

mysqlmp-uusername-ppassworddatabasename|mysql_host=*.*.*.*-Cdatabasename

实现MySQL数据库的备份与还原的几种方法

MyISAM 表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。Innodb 所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqlmp。1. 使用直接拷贝数据库备份 典型的如cp、tar或cpio实用程序当你使用直接备份方法时,必须保证表不在被使用。如果服务器在你正在拷贝一个表时改变它,拷贝就失去意义。保证你的拷贝完整性的最好方法是关闭服务器,拷贝文件,然后重启服务器。 如果你不想关闭服务器,要在执行表检查的同时锁定服务器。如果服务器在运行,相同的制约也适用于拷贝文件,应该使用相同的锁定协议让服务器“安静下来”。当你完成了MySQL数据库备份时,需要重启服务器(如果关闭了它)或释放加在表上的锁定(如果你让服务器运行)。 要用直接拷贝文件把一个数据库从一台机器拷贝到另一台机器上,只是将文件拷贝到另一台服务器主机的适当数据目录下即可。要确保文件是MyIASM格式或两台机器有相同的硬件结构,否则你的数据库在另一台主机上有奇怪的内容。你也应该保证在另一台机器上的服务器在你正在安装数据库表时不访问它们。2. 使用mysqlmp数据库备份mysqlmp 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。mysqlmp程序备份数据库较慢,但它生成的文本文件便于移植。mysqlmp 的一些主要参数:1)--compatible=name它告诉 mysqlmp,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用几个值,用逗号将它们隔开。当然了,它并不保证能完全兼容,而是尽量兼容。2)--complete-insert,-c导出的数据采用包含字段名的完整 INSERT 方式,也就是把所有的值都写在一行。这么做能提高插入效率,但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此,需要谨慎使用该参数,至少我不推荐。3)--default-character-set=charset指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。4)--disable-keys告诉mysqlmp 在 INSERT 语句的开头和结尾增加 ; 和 ; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。5)--extended-insert = true|false默认情况下,mysqlmp 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。6)--hex-blob使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。7)--lock-all-tables,-x在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。8)--lock-tables它和--lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。9)--no-create-info,-t只导出数据,而不添加 CREATE TABLE 语句。10)--no-data,-d不导出任何数据,只导出数据库表结构。11)--opt这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqlmp 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行 mysqlmp 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。12)--quick,-q该选项在导出大表时很有用,它强制 mysqlmp 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。13)--routines,-R导出存储过程以及自定义函数。14)--single-transaction该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用 --quick 选项。--triggers同时导出触发器。该选项默认启用,用 --skip-triggers 禁用它。备份:使用mysqlmp备份数据库其实就是把数据库转储成一系列CREATE TABLE和INSERT语句,通过这些语句我们就可重新生成数据库。使用mysqlmp的方法如下:% mysqlmp --opt testdb | gzip > /data/backup/testdb.bak#--opt选项会对转储过程进行优化,生成的备份文件会小一点,后的管道操作会进行数据压缩% mysqlmp --opt testdb mytable1,mytable2 | gzip > /data/backup/testdb_mytable.bak#可在数据库后接数据表名,只导出指定的数据表,多个数据表可用逗号分隔--opt选项还可激活--add-drop-table选项,它将会在备份文件的每条CREATE TABLE前加上一条DROP TABLE IF EXISTS语句。这可方便进行数据表的更新,而不会发生“数据表已存在”的错误。用mysqlmp命令还可直接把数据库转移到另外一台服务器上,不用生成备份文件。重复执行可定期更新远程数据库。% mysqladmin -h remote_host create testdb% mysqlmp --opt testdb | mysql -h remote_host testdb另外还可通过ssh远程调用服务器上的程序,如:% ssh remote_host mysqladmin create testdb% mysqlmp --opt testdb | ssh remote_host mysql testdb 通过直接拷贝系统文件的方式备份数据库,在备份时,要确保没有人对数据库进行修改操作。要做到这点,最好关闭服务器。如果不能关闭的,要以只读方试锁定有关数据表。下面是一些示例:% cp -r db /backup/db #备份db数据库到/backup/db目录% cp table_name.* /backup/db #只备份table_name数据表% scp -r db remotehot:/usr/local/mysql/data #用scp把数据库直接拷贝到远程服务器,在把数据库直接拷贝到远程主机时,应注意两台机器必须有同样的硬件结构,或者将拷贝的数据表全部是可移植数据表类型。或者/usr/local/mysql/bin/mysqlmp -uroot -proot \--default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob -x testdb > testdb.sql使用以下 SQL 来备份 Innodb 表:/usr/local/mysql/bin/mysqlmp -uroot -proot \--default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob --single-transaction testdb > testdb.sql另外,如果想要实现在线备份,还可以使用 --master-data 参数来实现,如下:/usr/local/mysql/bin/mysqlmp -uroot -proot \--default-character-set=utf8 --opt --master-data=1 \--single-transaction --flush-logs testdb > testdb.sql它只是在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入CHANGE MASTER 语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。 还原:用mysqlmp 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。直接用 mysql 客户端例如:/usr/local/mysql/bin/mysql -uroot -proot testdb < testdb.sql用SOURCE 语法其实这不是标准的 SQL 语法,而是 mysql 客户端提供的功能,例如:SOURCE /tmp/testdb.sql;这里需要指定文件的绝对路径,并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件。 3. 使用mysqlhotcopy数据库备份 使用mysqlhotcopy工具,它是一个Perl DBI脚本,可在不关闭服务器的情况下备份数据库,mysqlhotcopy 是一个 PERL 程序,最初由Tim Bunce编写。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。mysqlhotcopy 只能用于备份 MyISAM,并且只能运行在 类Unix 和 NetWare 系统上。它主要的优点是:它直接拷贝文件,所以它比mysqlmp快。可自动完成数据锁定工作,备份时不用关闭服务器。能刷新日志,使备份文件和日志文件的检查点能保持同步。备份:mysqlhotcopy 支持一次性拷贝多个数据库,同时还支持正则表达。以下是几个例子:/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root -p=root \testdb /tmp (把数据库目录 testdb 拷贝到 /tmp 下)/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root -p=root \testdb_1 testdb_2 testdb_n /tmp/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root -p=root \testdb./regex/ /tmp 还原:mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:cp -rf testdb /usr/local/mysql/data/chown -R nobody:nobody /usr/local/mysql/data/ (将 testdb 目录的属主改成 mysqld 运行用户) 4. 使用SQL语句数据库备份 BACKUP TABLE 语法其实和 mysqlhotcopy 的工作原理差不多,都是锁表,然后拷贝数据文件。它能实现在线备份,但是效果不理想,因此不推荐使用。它只拷贝表结构文件和数据文件,不同时拷贝索引文件,因此恢复时比较慢。备份:BACK TABLE tbl_test TO '/tmp/testdb/'; #把tbl_test数据库备份到/tmp/testdb/目录里,会自动创建一个testdb目录 为了执行该语句,你必须拥有那些表的FILE权限和SELECT权限,备份目录还必须是服务器可写的。该语句执行时,会先把内存中的数据写入磁盘,再把各个数据表的.frm(表结构定义文件)、.MYD(数据)文件从数据目录拷贝到备份目录。它不拷贝.MYI(索引)文件,因为它能用另外两个文件重建。BACKUP TABLE语句备份时,依次锁定数据表,当同时备份多个数据表时,数据表可能会被修改,所以备份0完成时,备份文件中的数据和现时数据表中的数据可能会有差异,为了消除该差异,我们可用只读方式锁定数据表,在备份完成后再解锁。如:mysql> LOCK TABLES tb1 READ,tb2 READ;mysql> BACKUP TABLE tb1,tb2 TO 'backup/db';mysql> UNLOCK TABLES;使用BACKUP TABLE语句备份的数据表可用RESTORE TABLE重新加载到服务器。注意,必须要有 FILE 权限才能执行本SQL,并且目录 /tmp/testdb/ 必须能被 mysqld 用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。SELECT INTO OUTFILE 则是把数据导出来成为普通的文本文件,可以自定义字段间隔的方式,方便处理这些数据。例子:SELECT * INTO OUTFILE '/tmp/testdb/tbl_test.txt' FROM tbl_test;注意,必须要有 FILE 权限才能执行本SQL,并且文件 /tmp/testdb/tbl_test.txt 必须能被 mysqld 用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。还原:用BACKUP TABLE 方法备份出来的文件,可以运行 RESTORE TABLE 语句来恢复数据表。例子:RESTORE TABLE FROM '/tmp/testdb/';权限要求类似上面所述。用SELECT INTO OUTFILE 方法备份出来的文件,可以运行 LOAD DATA INFILE 语句来恢复数据表。例子:LOAD DATA INFILE '/tmp/testdb/tbl_name.txt' INTO TABLE tbl_name;权限要求类似上面所述。倒入数据之前,数据表要已经存在才行。

Top