MySQL的二进制日志是不依赖于存储引擎的,而是依赖于SQL层,记录和SQL语句有关的信息。
主要用来备份数据和时间点恢复、主从同步。
statment(SBR)格式、Row(RBR)格式、MIXED(MBR)综合格式。
可以用sql语句进行查看(show variables like "binlog_format";)
定义:
.基于sql语句复制,每一条会修改数据的sql都会记录在binlog中。
优点:
.Binlog文件较小,节约IO,提高性能。
.日志是包含用户执行的原始SQL,方便统计和审计。
.Binlog方便阅读,方便故障修复。
缺点:
.存在安全隐患,可能导致主从不同步一致。
.对一些系统函数不能准复制或是不能复制。
定义:
.不记录sql语句上下文相关信息,只保留被修改的记录。
优点:
.相比statment更加安全的复制格式。
.在某些情况下复制速度更快(SQL复杂,表有主键)。
.系统的特殊函数也可以复制。
.更少锁。
缺点:
.Binary log比较大(支持 binlog_row_image)。
.单语句更新表的行数过多,会形成大量binlog。
.无法从binlog看见用户执行的SQL。
定义:
.混合使用row和statment格式。
优点:
.当DML(操纵语言语)句更新一个表时,或者当函数中包含UUID()时,自动将binlog的模式由statment模式改为Row模式。
缺点:
.对于DDL记录会STATMENT,对于TABLE里的行操作记录为row格式。
.如果使用Innodb表,事务级别使用了 READ COMMIT or READ UNCOMMITTED 日志级别只能使用row格式。

推荐阅读
每日一句
所有的大人都曾经是小孩子,虽然,只有少数人记得。——安东尼·德·圣艾修伯里
