mysql 事务
mysql 本身不提供事务支持的,而是开放了存储引擎接口,由具体的存储引擎来实现的,具体的来说是支持mysql 事务的存储引擎 innodb 存储引擎来实现的事务的,实现事务的通用方式是基于redo log 和 undo Log
简单的来说,redo log 记录事务修改后的数据,undo log 记录事务前的原始数据。
所以当一个事务执行时实现发生的过程描述如下:
1.先记录undo log ,redo log ,确保日志刷到磁盘上持久存储
2.更新数据记录,缓存操作并异步到磁盘
3.提交事务,在redo log 中 写入 commit 记录。
当mysql执行事务过程中,如果因故障中断,可以通过redo log 来重做事务,或者undo log 来回滚,来
保证事务一致性,这些都是有事务性存储引擎来完成的,而binlog 不在存储引擎范围累,binlog 是由mysql server 记录的
为保证binlog 数据和redo log 之间的一致性,所以开启了binlog 后实际的事务执行就多了一步,如下:
1.先记录undo log redo log ,确保日志刷到磁盘上持久存储
2.更新数据记录,缓存操作并异步刷盘
3.将事务日志持久化到binlog
4.提交事务,在redo log 中 写入commit记录
#注:因我的能力有限,可能有些问题,仅作参考