MySQL数据备份
该博文用于记录一下学习过程中学到的新知识,关于如何在MySQL中进行数据备份。如果之后有用到,可以用作参考。
直接看代码:
1 |
|
在备份开始的时候,为了确保 RR(可重复读)隔离级别,再设置一次 RR 隔离级别 (Q1);
启动事务,这里用 WITH CONSISTENT SNAPSHOT 确保这个语句执行完就可以得到一个一致性视图(Q2);
设置一个保存点(Q3);
show create 是为了拿到表结构 (Q4),然后正式导数据 (Q5),回滚到 SAVEPOINT sp,在这里的作用是释放 t1 的 MDL 锁 (Q6)。
注意如果这时传来一个DDL语句,假设这是一个小表,并且到达后如果开始执行,很快能够执行完成。这时会有什么现象呢?
- 如果在 Q4 语句执行之前到达,即时刻一,现象:没有影响,备份拿到的是 DDL 后的表结构。
- 如果在“时刻 2”到达,则表结构被改过,Q5 执行的时候,报 Table definition has changed, please retry transaction,现象:mysqldump 终止;
- 如果在“时刻 2”和“时刻 3”之间到达,mysqldump 占着 t1 的 MDL 读锁,binlog 被阻塞,现象:主从延迟,直到 Q6 执行完成。
- 从“时刻 4”开始,mysqldump 释放了 MDL 读锁,现象:没有影响,备份拿到的是 DDL 前的表结构。
该博文引用了《MySQL 实战 45 讲》的内容 ^(1)^
引用
(1) https://time.geekbang.org/column/article/70215
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hongjin's Blog!
评论