MySQL二进制日志文件Binlog的三种格式以及对应的主从复制中三种技术
二进制日志文件Binlog的格式主要有三种:
1、Statement:基于SQL语句级别的Binlog,每条修改数据的SQL都会保存到Binlog里面。
2、ROW:基于行级别,每一行数据的变化都会记录到Binlog里面,但是并不记住原始SQL语句,因此它会记录的非常详细,日志量也比statement格式记录的多得多。在主从复制中,这样的Binlog格式不会因存储过程或触发器原因造成主从数据不一致的问题。
3、Mixed:混合Statement和Row模式。
在mysql5.7中,默认是ROW模式记录
mysql> show variables like 'binlog_format%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+ 1 row in set (0.00 sec)
上面的三种复制模式也对应了MySQL的三种复制技术:
binlog_format=Statement:基于SQL语句的复制,在MySQL5.1.4之前的版本都是基于SQL语句的复制
binlog_format=ROW:基于行的复制
binlog_Mixed:混合复制模式,基于行的复制和基于SQL语句的复制。
总结:在MySQL的主从复制中,主库的Binlog_format设置为ROW格式比Statement格式更能保证从库数据的一致性,只是ROW格式下的Binlog日志可能会增大非常多,在设置时需要考虑磁盘空间问题。