1条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
MySQL的BinLog与Redo Log有什么区别?
BinLog和Redo Log在一定程度上都能恢复数据,但是二者有着本质的区别,具体内容如下:
1)BinLog是MySQL本身就拥有的,不管使用何种存储引擎,BinLog都存在;而Redo Log是InnoDB存储引擎特有的,只有InnoDB存储引擎才会输出Redo Log。
2)BinLog是一种逻辑日志,记录的是对数据库的所有修改操作;而Redo Log是一种物理日志,记录的是每个数据页的修改。
3)Redo Log具有幂特性,多次操作的前后状态是一致的,而BinLog不具有幂等性,记录的是所有影响数据库的操作。例如插入一条数据后再将其删除,则Redo Log前后的状态未发生变化,而BinLog就会记录插入操作和删除操作。
4)BinLog开启事务时,会将每次提交的事务一次性写入内存缓冲区,如果未开启事务,则每次成功执行插入、更新和删除语句时,就会将对应的事务信息写入内存缓冲区;而Redo Log是在数据准备修改之前将数据写入缓冲区的Redo Log中,然后在缓冲区中修改数据,而且在提交事务时,先将Redo Log写入缓冲区,写入完成后再提交事务。
5)BinLog只会在事务提交时,一次性写入BinLog,其日志的记录方式与事务的提交顺序有关,并且一个事务的BinLog中间不会插入其他事务的BinLog;而Redo Log记录的是物理页的修改,最后一个提交的事务记录会覆盖之前所有未提交的事务记录,并且一个事务的Redo Log中间会插入其他事务的Redo Log。
6)BinLog是追加写入,写完一个日志文件再写下一个日志文件,不会覆盖使用;而Redo Log是循环写入,日志空间的大小是固定的会覆盖使用。
7)BinLog一般用于主从复制和数据恢复,并且不具备崩溃自动恢复的能力;而Redo Log是在服务器发生故障后重启MySQL,用于恢复事务已提交但未写入数据表的数据。
评论
有用 5
墨值悬赏