MySQL 5.6.40 数据库备份工具mysqldump常用介绍
官方手册:
https://dev.mysql.com/doc/refman/5.6/en/mysqldump.html
https://dev.mysql.com/doc/refman/5.6/en/backup-and-recovery.html
mysqldump是mysql进行逻辑备份的工具,导出的数据是SQL形式存储。包含创建数据库,创建数据表,insert语句等。
备份
语法:
shell> mysqldump [options] db_name [tbl_name ...] shell> mysqldump [options] --databases db_name ... shell> mysqldump [options] --all-databases
① 直接指定数据库名称,后边可增加参数,都将作为表名称。可以指定导出某数据库的那些表。
② --databases, -B
使用此选项后边接的参数都将作为数据库名称,可以一次到处多个数据库信息。如果只导出一个数据库信息,也可以省略此选项。
导出数据库 aaa 和 test :
mysqldump -h localhost -uroot -p123456 -P 3306 --databases aaa test > ./`date +%Y%m%d.%H%M%S`.sql
③ --all-databases, -A
导出所有数据库数据。
# mysqldump -h localhost -uroot -p123456 -P 3306 --all_databases > ./`date +%Y%m%d.%H%M%S`.sql
在使用 --databases, -B 或 --all-databases, -A选项时,导出备份文件中会存在创建数据库(CREAT DATABASE)和选择数据库USE语句。
也可以增加 --add-drop-database 选项,使导出的备份文件中存在强制删除已存在的数据库语句。
常用参数:
--host=host_name, -h host_name
Mysql服务器IP,默认localhost。
--password[=password], -p[password]
密码。
--port=port_num, -P port_num
TCP/IP 链接的端口,默认3306。
--user=user_name, -u[user_name]
账户名。
--no-data, -d
不导出数据,只导出表结构。
--tables
类似 --databases(-B),指定导出那些表。
导出数据库 test 中 aaa 和 bbb 数据表。
mysqldump -uroot -p123456 --databases test --tables aaa bbb > ./`date +%Y%m%d.%H%M%S`.sql
--ignore-table=db_name.tbl_name
导出数据时,不到处某些表,参数格式必须是数据库名+表明。
如果要忽略多个表可以多次使用此选项。
mysqldump -uroot -p123456 --databases test --ignore-table=test.aaa > ./`date +%Y%m%d.%H%M%S`.sql
但是在使用 --tables 同时使用此选项,实测会失效,如下依然会导出 数据表aaa。
mysqldump -uroot -p123456 --databases test --ignore-table=test.aaa --tables aaa bbb > ./`date +%Y%m%d.%H%M%S`.sql
--triggers
同时导出触发器,不过默认是导出的,可以使用--skip-triggers选项,不导出触发器语句。
--opt
此选项是若干个选项的合集,默认是启动的,如果不想使用默认选项可通过增加参数--skip-opt屏蔽。
这些选项包括:
--add-drop-table :在备份文件创建数据表前增加删除数据表语句。
--add-locks :备份数据库表时锁定数据库表,用LOCK TABLES和 UNLOCK TABLES语句包围每个表备份。重新导入备份文件时加快插入速度。
--create-options :在CREATE TABLE语句中包括所有特定于MySQL的表选项。
--disable-keys (-K) :对于每个表,在INSERT语句周围加上/*!40000个ALTER TABLE tbl_name禁用键*/;和/*!40000条ALTER TABLE tbl_name ENABLE KEYS*/;语句。因为所有的索引都是在文件之后插入的,所以加载速度更快。此选项仅对MyISAM表的非唯一索引有效。
--extended-insert (-e):使每个INSERT语句存在多个VALUES,减少备份文件大小,增加再次导入时的插入速度。
--lock-tables :对于每个备份的数据库,在备份之前锁定所有要备份的表。
在MyISAM表的情况下,使用READ LOCAL锁定表,以允许并发插入。对于InnoDB这样的事务表,--single-transaction比--lock-tables要好得多,因为它根本不需要锁定表。
因为--lock-tables分别为每个数据库锁定表,所以此选项不能保证转储文件中的表在数据库之间逻辑上是一致的。不同数据库中的表可能以完全不同的状态转储。
有些选项,如--opt,会自动启用--lock tables。如果要覆盖它,请使用选项列表末尾的--skip-lock-tables。
--quick :使mysqldump一次从服务器中查询一行数据,而不是查询整个数据表并将其缓冲在内存后,再写入到备份文件。
--set-charset :将SET NAMES default_character_SET写入输出。默认情况下启用此选项。要取消SET NAMES语句,请使用--skip-set-charse。
还有很多其他参数建议参考文档。
还原备份
如果备份文件时,使用了--databases, -B 或 --all-databases, -A。文件中会存在创建数据库和USE声明,可直接导入。
# mysql -uroot -p123456 < ./aaa.sql
如果未使用以上两个选项,需要指定数据库
# 导出数据库aaa # mysqldump -uroot -p123456 aaa > ./aaa2.sql # 创建数据库bbb # mysqladmin -uroot -p123456 create bbb; # 导入数据库aaa到数据库bbb # mysql -uroot -p123456 bbb < ./aaa2.sql
也可以登录mysql客户端使用source命令
mysql> source /home/mysql/aaa.sql
如果备份文件中没有创建和使用数据库语句,需要创建(CREATE DATABASE bbb)和 USE bbb 声明。
从一台服务器导出数据到另外一台服务器
将 101 服务器上的数据库ccc,复制到本地:
# mysqldump -h 192.168.31.101 -uroot -p123456 --databases ccc | mysql --host=localhost -uroot -p123456