1.STATEMENT
每一条会修改数据的sql都会记录在binlog中。
优点:日志量少,节约了磁盘和网络IO。
缺点:为了这些sql语句能在slave上正确运行,必须记录每条语句在执行的时候的上下文信息。可能导致slave与master数据不一致,例如使用了UUID()函数。
2.ROW
保存被修改的记录。
优点:日志内容非常清楚的记录了每一行数据修改的细节,主从复制更加安全,对每行数据的修改比基于STATEMENT的复制高效,减少从数据库锁的使用。
缺点:日志量大。
设置为ROW时,有些更改仍然使用基于STATEMENT的格式,例如CREATE TABLE, ALTER TABLE。
binlog_row_image:
full会记录所有列,noblob会记录除blob和text外的所有列,minimal只会记录需要的列。
3.MIXED
一般的语句修改使用STATEMENT格式保存binlog,当STATEMENT无法完成主从复制的操作,则采用ROW格式保存binlog。