1.概述
mysqldump是mysql数据库的一个常用的工具,经常会使用它来做数据逻辑迁移、主从搭建等工作。
通过/usr/local/mysql/bin/mysqldump --help命令来查看这个命令的使用说明。
2.核心参数解释
这里介绍几个核心参数,也是生产中用得最多的参数。
–single-transaction
用于保证InnoDB备份数据时的一致性,配合RR隔离级别一起使用;当发起事务时,读取一个数据的快照,直到备份结束时,都不会读取到本事务开始之后提交的任何数据(这个参数相当重要)。
–all-databases (-A)
备份所有的数据库。
–master-data
该参数有1和2两个值,如果值等于1,就会在备份出来的文件中添加一个CHANGE MASTER的语句(后期配置搭建主从架构);如果值等于2,就会在备份出来的文件中添加一个CHANGE MASTER的语句,并在语句前面添加注释符号(后期配置搭建主从架构)。
–dump-slave
该参数用于在从库端备份数据,在线搭建新的从库时使用。该参数也有1和2两个值。值为1时,也是在备份出来的文件中添加一个CHANGE MASTER的语句;值为2时,则会在 CHANGE MASTER命令前增加注释信息。
–no-create-info (-t)
备份过程中,只备份表数据,并不备份表结构。
–no-data (-d)
备份过程中,只备份表结构,不备份表数据。
–complete-insert (-c)
使用完整的insert语句会包含表中的列信息,这么做可以提高插入效率。
–databases (-B)
备份多个数据库。例如:mysqldump -uroot -poracle123 -database db1 db2。
–default-character-set
字符集,MySQL目前默认的字符集为UTF8,要与备份出的表的字符集保持一致。
–quick (-q)
相当于加sql_no_query,意味着并不会读取缓存中的数据。
–where=name (-w)
按条件备份出想要的数据。
3.mysqldump工具使用方法演示
3.1全库备份与恢复
mkdir -p /data/backup
cd /data/backup
cd 进入/data/backup,然后备份。将在该目录下产生备份文件,如果不cd 进入,那么可以加绝对路径,比如:/data/backup/all_20190614.sql
3.1.1备份全库
/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle -A > all_20190614.sql
-A表示备份所有库
3.1.2恢复全库
/usr/local/mysql/bin/mysql -uroot -poracle < all_20190614.sql
注:这里最好给备份文件标注下时间,方便后期快速找到所需要恢复的文件。
如果数据库中已开启gtid选项,但备份过程中不想带gtid信息,可以加上–set-gtid-purged= OFF参数。
备份时,去掉gtid信息:
/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle -A --set-gtid-purged=OFF > all_2.sql
搭建主从复制,全库备份:
/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle -A --master-data=1 > all_1.sql
/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle -A --master-data=2 > all_2.sql
推荐方式,推荐–master-data=2 。
master-data=1 时,more all_1.sql
--
-- Position to start replication or point-in-time recovery from
--
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=154;
--
-- Current Database: `mysql`
--
master-data=2 时,more all_2.sql,可以看到设置master-data=2时,CHANGE MASTER前面是注释掉的。
--
-- Position to start replication or point-in-time recovery from
--
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=154;
--
-- Current Database: `mysql`
--
3.2单库备份与恢复
3.2.1备份单库
/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle test > mysqldump_test.sql
备份单个库,这里只备份test库
3.2.2恢复单库
create database test;
恢复单库时,如果test库不存在,要先创建,然后才能恢复。如果test库存在,可以直接恢复test库。
/usr/local/mysql/bin/mysql -uroot -poracle test < mysqldump_test.sql
3.3单库下某张表的备份与恢复
3.3.1备份单表
/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle test sbtest > mysqldump_test_sbtest.sql
备份单个库下的表,备份test库下sbtest表
3.3.2恢复单表
恢复单表时,导入符号之前不需要写表的名字,只需要写库的名字即可。
/usr/local/mysql/bin/mysql -uroot -poracle test < /data/backup/mysqldump_test_sbtest.sql
3.4单表部分数据的备份与恢复
3.4.1备份单表部分数据
根据条件备份某库下指定表的部分数据
root@db 21:49: [test]> select * from EMP where EMPNO in (7876,7900);
+-------+-------+-------+------+---------------------+------+------+--------+
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
+-------+-------+-------+------+---------------------+------+------+--------+
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 | 950 | NULL | 30 |
+-------+-------+-------+------+---------------------+------+------+--------+
2 rows in set (0.00 sec)
/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle test EMP --where=“EMPNO in (7876,7900)” > mysqldump_test_EMP.sql
备份test库下EMP表,EMPNO 为7876或者7900的记录。
/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle db1 EMP -d --where=“EMPNO>7900”> db1_EMP_over_7900.sql
备份单库db1下的EMP表中EMPNO大于7900的记录。
注:WHERE条件后面记得要加双引号(""),否则不会被识别。
3.4.2恢复单表部分数据
/usr/local/mysql/bin/mysql -uroot -poracle test < /data/backup/mysqldump_test_EMP.sql
恢复时,会把EMP表中的原记录清空,然后在恢复。不是追加进去。
3.5备份表结构
/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle db1 EMP -d > db1_EMP_d.sql
备份单库db1下的EMP表的表结构
3.6备份表定义
/usr/local/mysql/bin/mysqldump --single-transaction -uroot -poracle db1 EMP -t > db1_EMP_t.sql
备份单库db1下的EMP表的数据




