MySQL之binlog的三种格式

binlog 全称:binary log,即mysql二进制日志,有时候也称归档日志。
该日志记录了 MySQL 数据库执行更改的所有操作,包括表结构变更(CREATE、ALTER、DROP TABLE…)、表数据修改(INSERT、UPDATE、DELETE…),但不包括 SELECT 和 SHOW 这类操作,因为这类操作对数据本身并没有修改;若更改操作并未导致数据库变化,那么该操作也会写入 binlog。

binlog有三种格式:
1、statement
2、row
3、mixed

statement格式记录的是sql语句,由于执行的时间不一致以及使用系统函数等原因,可能会导致从库执行同样sql时出现数据不一致问题;(举个例子,比如在执行时用随机函数随机一条记录进行删除,每台机器上随机出来的值不一样,删除的数据就不一样)
row格式记录的是sql语句解析执行之后实际变更的数据行,因为具体到数据行了,所以不会有数据不一致的问题,但是日志文件会比较大;(举个例子,通过where条件删除10w条数据,row格式需要记录10w条数据的变更,比statement格式多很多)
mixed格式是statement格式和row格式的混合,mysql自动判断执行的sql应该记录成statement还是row。

一般从数据准确性考虑,推荐使用 row 格式进行记录。
mysql在5.7.7之前默认statement,5.7.7及之后(包含5.7.7)默认row。

参考资料:
https://www.cnblogs.com/dbbull/p/15570698.html
《MySQL 实战 45 讲》之 24 | MySQL是怎么保证主备一致的?


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍