关于mysql:万答10mysqldump-是如何实现一致性备份的

万答10:mysqldump 是如何实现一致性备份的

试验场景

MySQL 8.0.25
InnoDB

试验步骤:

先开启 general_log 察看导出执行过程的变动

set global general_log=ON;

mysqldump 要害参数阐明:

–single-transaction 参数阐明:

将隔离级别设为 REPEATABLE READ , 并开启一个只读事务,该事务中会进行一致性快照读,这个选项对InnoDB的数据表无效,然而不能保障MyISAM表和MEMORY表的数据一致性,dump 操作期间会先敞开所有关上的表,并产生FTWRL锁 ,而后疾速开释FTWRL锁。

general_log 日志显示如下:

FLUSH /*!40101 LOCAL */ TABLES
FLUSH TABLES WITH READ LOCK
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */

如果这时候以后的数据库曾经有表锁,那么dump操作会被梗塞,直到先前的表锁被开释后继续执行;或者超过锁定工夫 lock_wait_timeout 后退出。

上面是先模仿执行了 LOCK TABLES t_user READ; 操作后,dump操作被梗塞的状况。

(Sun Nov 21 06:42:07 2021)[root@GreatSQL][(none)]>show processlist;
+----+-----------------+-----------+------+---------+-------+-------------------------+--------------------------------+----------+-----------+---------------+
| Id | User            | Host      | db   | Command | Time  | State                   | Info                           | Time_ms  | Rows_sent | Rows_examined |
+----+-----------------+-----------+------+---------+-------+-------------------------+--------------------------------+----------+-----------+---------------+
|  5 | event_scheduler | localhost | NULL | Daemon  | 77523 | Waiting on empty queue  | NULL                           | 77523235 |         0 |             0 |
| 11 | root            | localhost | test | Sleep   |   266 |                         | NULL                           |   266664 |         0 |             0 |
| 14 | root            | localhost | NULL | Query   |   263 | Waiting for table flush | FLUSH /*!40101 LOCAL */ TABLES |   263751 |         0 |             0 |
| 17 | root            | localhost | NULL | Query   |     0 | init                    | show processlist               |        0 |         0 |             0 |
+----+-----------------+-----------+------+---------+-------+-------------------------+--------------------------------+----------+-----------+---------------+
4 rows in set (0.00 sec)

–master_data=1|2 参数阐明:

执行 show master status\G; 获取binlog文件和position值,区别在于参数设置为2,导出的内容被正文了。
general_log日志显示如下:

失常备份流程图解

  • 失常备份流程图解

没有加 –single-transaction 和 –master_data 参数执行流程

  • 加了–single-transaction 和 –master_data 参数执行流程

举荐延长浏览:

  • https://imysql.com/2008_10_24…

Enjoy GreatSQL 🙂

文章举荐:

技术分享 | MGR最佳实际(MGR Best Practice)
https://mp.weixin.qq.com/s/66…

技术分享 | 万里数据库MGR Bug修复之路
https://mp.weixin.qq.com/s/Ia…

Macos零碎编译percona及局部函数在Macos零碎上运算差别
https://mp.weixin.qq.com/s/jA…

技术分享 | 利用systemd治理MySQL单机多实例
https://mp.weixin.qq.com/s/iJ…

产品 | GreatSQL,打造更好的MGR生态
https://mp.weixin.qq.com/s/By…

产品 | GreatSQL MGR优化参考
https://mp.weixin.qq.com/s/5m…

对于 GreatSQL

GreatSQL是由万里数据库保护的MySQL分支,专一于晋升MGR可靠性及性能,反对InnoDB并行查问个性,是实用于金融级利用的MySQL分支版本。

Gitee:
https://gitee.com/GreatSQL/Gr…

GitHub:
https://github.com/GreatSQL/G…

微信&QQ群:

可扫码增加GreatSQL社区助手微信好友,发送验证信息“加群”退出GreatSQL/MGR交换微信群,亦可间接扫码退出GreatSQL/MGR交换QQ群。

本文由博客一文多发平台 OpenWrite 公布!

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理