MySQL的binlog有三种形式,分别是statement、row以及mixed。

  • statement
    当binlog的格式为statement时,binlog里面记录的就是SQL语句的原文,也就是说在数据库中执行的SQL会原封不动的记录到binlog中。
    这种格式会导致主从同步的数据不一致问题。
  • row
    在ROW格式中,binlog会记录每个数据的具体行的细节。这意味着二进制日志中的每个条目都会详细列出发生变更的内容和修改。
    这种格式的缺点可能会记录更多的内容,在数据恢复的时候,会需要更长的时间,也会导致磁盘io和网络io都比较高。
  • mixed
    这种是statement和row结合,MySQL会根据SQL的情况,自动在row和statement中互相切换选择一个他认为合适的格式进行记录。
    但是,在RR下,row和statement都可以生效,但是在RC情况下,只有row格式才能生效。