Mysql的binlog为什么不支持奔溃恢复

先说说当Mysql只有binlog日志时,启动的时候是怎样恢复数据的?
对于一个事务,只有两种状态,commit和prepared,所以启动的时候,Mysql会去检查binlog中事务的状态,对于commit状态的事务,不用处理,因为它认为数据已经写盘了;而对于prepared状态的事务,自然Mysql就要回滚该事务,操作就是修改相应的页了。

明白上面的原理后,我们说说下面的场景:
当事务1和事务2并发运行,事务1已经写了binlog并且提交了,其实对于一个事务,binlog是先写到binlog cache的,客户端发出commit命令的时候才会将这个binlog cache写盘,可以认为;事务2收到客户端的commit命令后,写binlog,但是写完之后Mysql发生了异常重启,这里,我想说:binlog是基于事务来记录日志,而不是事务日志,我目前的理解是如果将sync_binlog=1设置为1,表示每次事务提交时,才会将binlog cache写盘,Mysql发生crashho

猜你喜欢

转载自blog.csdn.net/weixin_42002747/article/details/103411116