二十八、mysqldump备份
简介
mysqldump备份也叫逻辑备份,是将数据转换成sql语句保存成文件进行备份。
适用于小于30G的数据备份。
大于30G的备份建议使用XBK物理备份。
常用备份参数
1、不带参数备份单个数据库中的所有表
#备份xyz数据库中的所有表
$ mysqldump -uroot -p123 xyz >/backup/xyz.sql
#备份world数据库中的city、country表
$ mysqldump -uroot -p123 world city country > /backup/tab.sql
#使用egrep去掉多余注释查看备份结果
$ egrep -v "#|\*|--^$" /backup/xyz.sql
LOCK TABLES `student` WRITE;
UNLOCK TABLES;
#会发现多了两条锁表跟解锁语句
注意:不加参数备份不会生成建库语句。
2、加-B参数
增加创建和使用数据库语句,由此可以同时备份多个数据库
$ mysqldump -uroot -p123 -B xyz test sch >/backup/xyz1.sql
#使用diff进行对比两个文件
$ diff /backup/xyz1.sql /backup/xyz.sql
3、加-A参数
备份所有数据库
#全备建议压缩节省空间
$ mysqldump -uroot -p123 -A |gzip >/backup/full.sql.gz
#解压几种方式
$ gzip -d /backup/test.sql.gz #会删除压缩文件
$ gzip -cd /backup/test.sql.gz > /backup/test.sql #不会删除压缩文件
$ zcat /backup/test.sql.gz > /backup/test.sql #不会删除压缩文件
4、加-R参数(建议加上)
备份存储过程和函数,存储过程相当于一堆sql语句,类似于shell脚本,加上此参数有存储过程就备份没有就跳过。
5、加-E参数(建议加上)
备份事件,事件相当于linux中的计划任务,有计划任务就备份,没有则跳过。
6、加--triggers参数
备份触发器,了解即可。
7、--master-data=2参数
记录备份后的binlog起点信息方便以后找到恢复点,默认为1,可选值为1,2
值1:将起点信息以语句方式记录到文件中
值2:将起点信息以注释的方式记录到文件中(常用)
注意此参数跟--single-transaction参数一起使用。
可以看到记录的起点信息包括MASTER_LOG_FILE二进制日志文件名,MASTER_LOG_POS为备份后二进制日志的起点信息。
$ mysqldump -uroot -p123 --master-data=1 test --compact|head -1
mysqldump: [Warning] Using a password on the command line interface can be insecure.
#可以看到--master-data=1时以CHANGE MASTER TO语句记录到备份文件中
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
mysqldump: Got errno 32 on write
注意使用--master-data参数会自动进行锁表备份(相当于开启--lock-all-tables功能),防止备份过程中数据写入,以防止造成MASTER_LOG_POS记录不准确的情况发生;
8、--single-transaction参数
使用该参数对innodb表进行备份时,会单独开启一个备份事务,故不影响其他会话数据写入,也就相当于关闭--lock-all-tables锁表功能,但是仅限于InnoDB引擎的表,也叫快照备份。
7、其他参数P135
-x: 锁表
-d: 只备份建表语句,不备份表数据,sql语句形式备份;
-t: 只备份表数据,sql语句形式备份,insert等;
-T: 将建表语句跟数据分离备份,数据为纯文本txt格式,建议使用excle打开。使用此参数需要在/etc/my.cnf
中增加secure-file-priv
选项。
-F:刷新binlog文件参数,使用此参数会重新生成一个二进制日志文件,以便确定全备跟增量备份的界限,以便使用增量备份还原。
使用sql语句导入导出表
需要设置导入导出安全路径
编辑/etc/my.cnf
$ vim /etc/my.cnf
[mysqld]
...
#为空表示所有路径均可导入导出
secure-file-priv=
$ /etc/init.d/mysqld restart
1、导出
mysql> select * from test into outfile "/backup/test.xlsx";
2、导入
mysql> load data infile '/backup/test.txt' into table test;
参考《mysql入门与提高实践》P141
恢复数据
1、使用source恢复
mysql> source test.sql
2、使用mysql命令恢复
#如果备份时使用了-B参数可直接恢复
$ mysql test < /backup/test.sql
#如果未使用-B,则指定student库恢复
$ mysql student < /backup/test.sql
建议在sql语句文件中加入字符集以防止乱码
$ cat test.sql
set names utf8;
insert into test(name) values('xiaoming');
mysqldump扩展参数
--set-gtid-purged=AUTO/ON
默认是AUTO,在构建主从时,必须使用AUTO/ON
开启后会在导出的备份中生成如下注释,该注释表示备份中包含的GTID事务的范围
--SET @@GLOBAL.GTID_PURGED='aa648280-a6a6-11e9-949f-000c294a1b3b:1-11';
仅是单机备份恢复时,使用OFF
效果:不会在备份文件中有上述注释,就跟没开GTID效果一样;
参考资料:关于主从架构使用--set-gtid-purged参数
--max_allowed_packet=128M
控制备份时传输数据包的大小,当表太大时备份会有报错,需要调整此参数大小。
学习来自:郭老师博客,secure_file_priv参数说明,老男孩深标DBA课程 第七章 备份恢复-1,《MySQL入门与提高实践》第七章