195  
mysql5.7下mysqldump原理解析
作者: 文艺范儿 于 2021年02月23日 发布在分类 / linux / mysql 下,并于 2021年02月23日 编辑
mysqldump

mysql5.7下mysqldump原理解析

mysqldump备份分为两种方式,我们从两个场景来分析底层的原理,感兴趣的同学可以通过实践来验证原理

1. 非一致性备份

mysqldump -uroot -p test >test_`date +%Y%d%m`_0.sql

备份原理解析

1.获取当前GTID信息

2.在需要备份的DB,查看表

3.对表加read lock

4.利用show create table xxx;进行备份(循环至整个DB下表备份结束)

5.释放表上read lock

流程图可以看出:

1.备份数据不一致

2.备份锁表时间时长和备份内容成正比

3.适合非事务引擎的一致性备份


2. 一致性备份

mysqldump -uroot -p--master-data=2 --single-transaction test> test_`date +%Y%d%m`_1.sql

FLUSH TABLES:Closes all open tables, forces all tables in use to be closed, and flushes the query cache and prepared statement cache.

FLUSH TABLES also removes all query results from the query cache, like the RESET QUERY CACHE statement.

说白了:mysqldump对当前需要备份的mysql数据库进行简单评估,是否有大事物之,是否有DDL操作;同时减少第二次FTWRL锁表时间;没有则我们就行备份


备份原理解析

1.第一次flush是不需要锁表的,第一次将所有数据刷新到磁盘,检查能否进行加锁一致性备份

2.FTWRL针对全库加global read lock

3.设置事务隔离级别RR,为了下面进行快照上一致性读而做(RR mysql默认的隔离级别)

4.开启一个一致性快照的事务

5.获取GTID

6.释放FTWRL加的 global read lock

7.做一个还原点

8.查看库里所有表的信息

9.利用show create table xxx;进行备份(循环至整个DB下表备份结束),每个表备份结束时回退到还原点

10.释放掉还原点

流程图可以看出:

1.锁表时间短

2.一致性备份(innodb)

3.备份是否能有效进行,取决于第一步下发的flush tables

4.对于非事务引擎,不会进行一致性备份




 推荐知识

 历史版本

修改日期 修改人 备注
2021-02-23 14:39:43[当前版本] 文艺范儿 创建版本

  目录
    文艺知识分享平台 - 4.3.0 - 文艺范儿