mysql的日志类型
二进制日志
记录了所有对Mysql数据库的修改事件,包括增删改查事件和对表结构的修改事件
基于段的格式
binlog_format=STATEMENT
该格式日志记录量相对较小,节约磁盘及网络I/O
只对一条记录修改或者插入,row格式所产生的日志量小于段产生的日志量
必须记录上下文信息,保证语句在从服务器上执行结果和在主服务器上相同,有可能出现主从不一致
基于行的日志格式
binlog_format=ROW
可以避免MySQL复制中出现的主从不一致问题
对于一条修改了10000条数据的sql语句
基于段的日志格式只会记录这个SQL语句
基于行的日志会有10000条记录分别每一行的数据修改
优点
使MySQL主从复制更加安全
对每一行数据的修改比基于段的复制高效
误操作而修改了数据库中的数据,同事无备份时可以通过分析二进制日志,对日志中记录的数据修改操作做反向处理的方式达到恢复数据的目的
缺点
记录日志量较大
binlog_row_image = [FULL(默认)|MINIMAL|NOBLOB]
混合日志格式
binlog_format=MIXED
特点
根据SQL语句有系统在基于段和基于行的日志格式中进行选择
数据量的大小有所执行的SQL语句决定
MYSQL二进制日志格式对复制的影响
基于SQL语名的复制(SBR)
优点
- 生成的日志量少,节约网络传输I/O
- 并不强制要求主从数据库的表定义完全相同
缺点
- 对于非确定型事件,无法保证主从复制数据的一致性
- 对于存储过程,触发器,自定义函数进行的修改可能造成数据不一致
- 相比于季宇航的复制方式,在从上执行时需要更多的表锁
基于行的复制(RBR)
优点
- 可以应用于任何SQL的复制包括非确定函数,存储过程等
- 可以减少数据库锁的使用
缺点
- 要求主从数据库的表结构相同,否则可能会中断复制
- 无法在从上单独执行触发器