0
点赞
收藏
分享

微信扫一扫

万答#10:mysqldump 获得一致性快照执行了哪些操作

Java架构领域 2022-03-15 阅读 8

实验场景

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日志显示如下:


-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000002', MASTER_LOG_POS=196;

正常备份流程图解

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

万答#10:mysqldump 获得一致性快照执行了哪些操作_mysql

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

万答#10:mysqldump 获得一致性快照执行了哪些操作_sql_02


Enjoy GreatSQL :)


关于 GreatSQL


GreatSQL​是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

Gitee: 
​https://gitee.com/GreatSQL/GreatSQL

GitHub: 
​https://github.com/GreatSQL/GreatSQL



举报

相关推荐

0 条评论