mysql binlog_format有几种类型?

在 MySQL 中,**binlog_format 参数决定了二进制日志(binlog)的记录方式**,它有三种主要的格式。


1. STATEMENT(语句格式)

在这种模式下,二进制日志记录的是 SQL 语句的原始文本。例如,如果你执行了一个 INSERT 语句,二进制日志就会记录下该 INSERT 语句。

  • 优点:二进制日志文件较小,且容易读取。
  • 缺点:如果 SQL 语句的执行依赖于非确定性函数(例如 RAND()NOW()),则可能导致复制的不一致性。

2. ROW(行格式)

这种模式下,二进制日志记录的是数据行的变化,而不是 SQL 语句本身。每一行的变动(插入、更新、删除)都会被记录下来。

  • 优点:确保数据的一致性,即使 SQL 语句包含非确定性函数也不会影响复制。
  • 缺点:日志文件会变得很大,尤其是在更新大量数据时。

3. MIXED(混合格式)

混合格式是 STATEMENTROW 两者的结合。MySQL 会根据执行的 SQL 语句类型自动选择使用 STATEMENTROW 格式。例如,如果 SQL 语句是确定性的,那么 MySQL 会选择 STATEMENT 格式;否则,选择 ROW 格式。

  • 优点:在确保数据一致性的同时,也尽量减小日志文件的大小。
  • 缺点:稍微复杂一些,依赖于 MySQL 的自动选择。

默认情况下,MySQL 会使用 STATEMENT 格式,但在一些高可用性的复制场景中,ROW 格式可能会更合适,尤其是在涉及事务性操作或非确定性查询时。