binlog日志有三种模式
1)ROW(row-basedreplication,RBR):
日志中会记录每一行数据被修改的情况,然后在slave端对相同的数据进行修改。
优点:
能清楚记录每一个行数据的修改继节,能完全实现主从数据同步和数据的恢复。而且不会出现某些特定情况下存储过程或function无法被正确复制的问题。
缺点:
批量操作,会产生大量的日志,尤其是alter table会让日志量暴涨。
2)STATMENT (statement-based replication,SBR):
记录每一条修改数据的SQL语句(批量修改时,记录的不是单条SQL语句,而是批量修改的SQL语句事件),slave在复制的时候SQL进程会解析成和原来master端执行过的相同的SQL再次执行。简称SQL语句复制。
优点:
日志量小,减少磁盘IO,提升存储和恢复速度。
缺点:
在某些情况下会导致主从数据不一致,比如last_insert_id0、now0等函数。
3)MIXED (mixed-based replication,MBR):
以上两种模式的合使用,一般会使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择写入模式
企业场景如何选择binlog的模式
1.如果生产中使用MySQL的特殊功能相对少(存储过程、触发器、函数)。选择默认的语句模式Statement.
2如果生产中使用MySQL的特殊功能较多的,可以选择Mixed模式。
3.如果生产中使用MySQL的特殊功能较多,又希望数据最大化一致,此时最好Row 模式,但是要注意,该模 式的binlog日志量增长非常快