万答 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 公布!