mysql对binlog的处理说明

2019-01-03 18:24:52王振洲

答案是由存储引擎决定数据。
可以把mysql和它的存储引擎分开看,因为mysql只是一个框架,而不是一个实现。
binlog是mysql自己的日志,而事务是由存储引擎本身保证的。
以update为例,mysql做的事情简单分为:
1. 修改数据update
2. 写binlog
3. 如果当前处理的表是一个事务性的表,则commit或rollback
注意此处的update和commit/rollback都由存储引擎实现,mysql只是站在逻辑的高度上理解这些操作。
对于事务型的引擎innodb,它本身有日志保证数据的一致性。在innodb的实现中,update修改数据之前,
会新建一个事务,并建立一个回滚点。而在innodb提供的commit/rollback接口会提交/回滚事务。
因此对innodb而言,每条SQL语句的事务,其实包含了binlog的写操作。然而即使是这样,innodb仍然无法保证
binlog和数据的一致性,因为innodb在写commit成功后crash,回滚操作不会回滚binlog。按照手册上的说法,
把--innodb-support-xa设置为1,同时保证sync_binlog=1,才能保证innodb的binlog和数据一致。

对于非事务型的引擎myisam,没有commit/rollback的机会,因此在异常情况下,数据会和binlog不一致。
那么新的问题出现了:myisam如何处理这个不一致呢?

您可能感兴趣的文章:

MySQL数据库恢复(使用mysqlbinlog命令)MySQL中的binlog相关命令和恢复技巧mysql 正确清理binlog日志的两种方法Mysql Binlog快速遍历搜索记录及binlog数据查看的方法MySQL 自动清理binlog日志的方法教你自动恢复MySQL数据库的日志文件(binlog)mysql binlog二进制日志详解Mysql数据库之Binlog日志使用总结(必看篇)MySQL数据库遭到攻击篡改(使用备份和binlog进行数据恢复)mysql如何利用binlog进行数据恢复详解