暂无图片
分享
杨豹
2019-10-11
mysqldump的问题
暂无图片 10M

mysqldump中加入--single-transaction参数的时候,从general-log中看到数据库会做一个快照,然后每备份下一个表都会回到该快照,但是我在做实验的时候发现快照没什么用,因为不管回不回到快照,得到的数据都是备份开始时的数据,其它会话根本不会对备份的事务产生影响,为什么mysqldump会在备份时创建一个快照呢?

Snipaste_2019-10-11_17-51-31.png

Snipaste_2019-10-11_17-51-56.png


收藏
分享
4条回答
默认
最新
张小帅

保持备份时数据一致性:因为每个表的备份时间并不相同,这就要求在对第一张表进行备份的期间,对第二个表进行的操作,并不会反映到第二张表开始备份时执行的SELECT操作中。(注:mysqldump备份的底层实现即是select * from tab)

暂无图片 评论
暂无图片 有用 0
张小帅

也是避免了锁表,

暂无图片 评论
暂无图片 有用 0
杨豹

你好,请看我的第二张图片,当其它会话在对t2表进行修改时,第一个会话仍然查到的是t2表的就数据,也就是说

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */

有这两步,就能保证接下来查到的所有数据都是一个时间点的,根本不用快照,即使其它会话产生了事务。我就纳闷,它为什么非得弄一个快照。


暂无图片 评论
暂无图片 有用 0
杨豹
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏