Mysqldump

  • 逻辑备份概念
  • Mysqldump原理
  • Mysqldump使用方法


逻辑备份概念

什么是逻辑备份?

逻辑备份是指使用软件技术从数据库中导出数据并写入一个输出文件,该文件的格式一般与原数据库的文件格式不同,只是原数据库中数据内容的一个映像。因此,逻辑备份文件只能用来对数据库进行逻辑恢复,即数据导入,而不能按数据库原来的存储特征进行物理恢复。逻辑备份一般用于增量备份,即备份那些在上次备份以后改变的数据。

MySQL逻辑备份的方式

mysqldunp
特点:官方,单进程导出,导入,功能单一。
mysqlpump
特点:MySQL5.7后出现,可以并行导出(schema,table),和MySQL特性结合比较好,功能丰富。
mydumper
特点:社区开源产品,支持并行导出,导入,功能单一。

Mysqldump原理

我们可以通过general_log的方式去查看mysqldump的整个执行流程和原理。

mysql> set global general_log=1;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%general%';
+------------------+-------------------------------+
| Variable_name    | Value                         |
+------------------+-------------------------------+
| general_log      | ON                            |
| general_log_file | /data/3306/data/localhost.log |
+------------------+-------------------------------+
2 rows in set (0.29 sec)

进行备份

[root@localhost ~]# mysqldump -uroot -p -S /data/3306/soket/mysql.sock -A -R -E --triggers --master-data=2  --single-transaction --set-gtid-purged=ON >/tmp/back.sql
Enter password:
[root@localhost ~]#

查看general log:

mysqldump 备份数据需要哪些权限 mysqldump备份原理_mysql


我总结一下上图中的整个备份过程:

1.flush tables #保证没有人在做表的ddl操作

2.flush table with read lock #instance锁定到只读状态

3.set session transaction isolation level repeatable read #事务隔离级别设置为RR状态,得到事务一致性读

4.start transaction #开启一个事务

5.select @@global.gtid_executed #获取GTID

6.show master status; #查看GTID和binlog日志偏移位position

7.unlock tables #解锁,查看时间可以看到锁定的时间非常短

8.show create database mysql; #拿到数据库建库语句

9.savepoint sp #启动一个innodb事务断点

10.show create table ‘xxx’ #拿到表结构

11.select * from xxx; #拿到表数据

12.rollback to savepoint sp #回滚到sp处

13.重复以上表取表结构表数据等的步骤

14.release savepoint sp #释放断点

Mysqldump使用方法

备份语句:

mysqldump -uroot -p -A -R -E --triggers --master-data=2  --single-transaction --set-gtid-purged=ON >/data/backup/full.sql

-R #备份存储过程及函数
- -triggers #备份触发器
-E #备份事件
-A #备份所有库
- -master-data=2 #以注释的形式记录,备份时刻的文件名+postion号,
- -single-transaction #此选项会将隔离级别设置为:REPEATABLE READ。并且随后再执行一条START TRANSACTION语句,让整个数据在dump过程中保证数据的一致性,配合master-data可以实现对innodb表进行快照备份,对非innodb表实现自动锁表功能
- -set-gtid-purged #使用场景: 是否刷新gtid号,on就是接下去,不是ON就是重新开始,auto=on ,在搭建主从时必须为on
- -max-allowed-packet=# 限制最大的包的大小