名词释义
STATEMENT causes logging to be statement based. 不安全,快速
ROW causes logging to be row based. 安全,有可能执行缓慢,效率不高
MIXED causes logging to use mixed format. 根据情况选择合适的解决方案:判断陈述是否是不确定性。有可能造成不安全结果
使用方式
mysql> SET GLOBAL binlog_format = 'STATEMENT';
mysql> SET GLOBAL binlog_format = 'ROW';
mysql> SET GLOBAL binlog_format = 'MIXED';
区别解释
case1:
UPDATE mytable SET a = a + 1 LIMIT 1;
STATEMENT 并不保证哪一个数据会被更新,因为在磁盘中的顺序无法保证,而ROWS可以保证准确的数据。
case2
UPDATE mytable SET a = a + 1;
STATEMENT 只用复制少量bytes表示该复制操作,而如果数据量较大,ROWS会复制全部数据,造成非常大的binlog日志。
参考:
https://dev.mysql.com/doc/refman/5.7/en/binary-log-setting.html
https://serverfault.com/questions/212549/which-binlog-format-to-use-for-mysql-replication