stupid_lee 发表于 2015-10-25 13:40

事务型表的一致性备份疑问

    各种论坛和培训视频都是 mysqldump --single-transaction 对于innodb引擎的表不会锁表,但为什么称这样为一致性备份呢。据我所知 非事务型表备份时加上 lock-all-tables 算是一致性,因为备份间其他连接对备份的表没有写入权限。

    那么为什么--single-transaction 不锁表的情况也被成为一致性备份呢?没有人细说这个点,我的猜测如下:

    --single-transaction--master-state=x, 当这两个参数同时出现的时候,mysqldump在备份innodb表时先记录binlog中最后一条语句的position,然后将当前数据做个snapshot。管他其他连接对数据再做任何的操作。当前的mysqldump这个事物只备份记录的position之前的数据(也就是snapshot的数据),记录完则推出会话。
   myisam引擎没有会话这一说,因此mysqldump的时候如果不加上--lock-all-table的话。备份的同时数据还在一直写着,而且myisam又没有snapshot的功能,不知道要备份到什么时候结束


      我不知道自己理解正确不,还请mysql大牛指正

lyhabc 发表于 2015-10-25 16:22

加上--single-transaction之后,mysql会记录当前所有redo logfile里已经提交的事务,并吧数据放入sql文件
而未提交的事务不会放入sql文件,所以可以不锁表,因为他可以分辨出哪些是未提交事务,哪些是已提交事务
而myisam不支持事务,所以在备份那一刹那,没有一个标记点,要备份到哪一个标记点根本不知道
所以只能停写,锁表
页: [1]
查看完整版本: 事务型表的一致性备份疑问