介绍
1 | 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具;它自带的功能参数非常多,可以轻松完成看似很复杂的需求。 |
本文摘选自:Pursuer.chen
语法
1 | Usage: mysqldump [OPTIONS] database [tables] |
1.导出所有数据库
1 | mysqldump -uroot -proot --all-databases >/tmp/all.sql |
2.导出db1、db2两个数据库的所有数据
1 | mysqldump -uroot -proot --databases db1 db2 >/tmp/user.sql |
3.导出db1中的a1、a2表
1 | mysqldump -uroot -proot db1 table1 table2 >/tmp/db1.sql |
4.条件导出
1 | (1)当字段是整数,使用如下命令: |
附录:一次查询或删除同一个库的多张表
1 | mysql -uroot -p -e "use ${remote_db2}; |
5.生成新的binlog文件
1 | 有时候会希望导出数据之后生成一个新的binlog文件,只需要加上-F参数即可 |
6.只导出表结构不导出数据,–no-data
1 | mysqldump -uroot -proot --no-data --databases db1 >/tmp/db1.sql |
7.跨服务器导出导入数据
1 | mysqldump --host=h1 -uroot -proot --databases db1 |mysql --host=h2 -uroot -proot db2 |
1 | mysqldump --host=h1 -uroot -proot -C --databases db1 |mysql --host=h2 -uroot -proot db2 |
8.将主库的binlog位置和文件名追加到导出数据的文件中,–dump-slave
1 | 注意: |
1 | 当该参数在slave服务器上执行时,相当于执行show slave status。当设置为1时,将会以CHANGE MASTER命令输出到数据文件;设置为2时,会在change前加上注释。 |
9.将当前服务器的binlog的位置和文件名追加输出到文件,–master-data
1 | 该参数和--dump-slave方法一样,只是它是记录的是当前服务器的binlog,相当于执行show master status,状态(file,position)的值。 |
10.–opt和–skip-opt
1 | 等同于--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 该选项默认开启, 可以用--skip-opt禁用,来避免锁表。 |
11.保证导出的一致性状态, –single-transaction
1 | 该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎(它不显示加锁通过判断版本来对比数据),仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。 |
1 | --quick, -q |
12.开始导出前,锁定所有表, –lock-tables,-l
1 | 用READ LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。 |
13.导出存储过程和自定义函数, –routines, -R
1 | mysqldump -uroot -p --host=localhost --all-databases --routines |
14.压缩备份+还原
1 | 压缩备份 |
1 | 还原 |
附录:参数说明:
1 | --all-databases , -A: 导出全部数据库。 |
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2018/07/25/mysqldump数据导入导出-详解/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!