二进制日志格式

来自泡泡学习笔记
BrainBs讨论 | 贡献2023年8月15日 (二) 09:05的版本 (创建页面,内容为“服务器使用多种日志格式来记录二进制日志中的信息: * MySQL中的复制功能最初基于将SQL语句从源复制到副本的方式。这称为基于语句的日志记录。您可以通过使用–binlog-format=STATEMENT选项启动服务器来使用这种格式。 * 在基于行的日志记录(默认情况下),源将事件写入二进制日志,指示单个表行如何受到影响。您可以通过使用–binlog-format=ROW选项…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

服务器使用多种日志格式来记录二进制日志中的信息:

  • MySQL中的复制功能最初基于将SQL语句从源复制到副本的方式。这称为基于语句的日志记录。您可以通过使用–binlog-format=STATEMENT选项启动服务器来使用这种格式。
  • 在基于行的日志记录(默认情况下),源将事件写入二进制日志,指示单个表行如何受到影响。您可以通过使用–binlog-format=ROW选项启动服务器来使用基于行的日志记录。
  • 第三个选项也可用:混合日志记录。在混合日志记录中,默认情况下使用基于语句的日志记录,但在某些情况下,日志模式会自动切换为基于行的模式。您可以通过使用–binlog-format=MIXED选项来显式地让MySQL使用混合日志记录。

日志记录格式也可以由所使用的存储引擎设置或限制。这有助于消除在源和副本之间复制某些语句时可能出现的问题,因为它们使用不同的存储引擎。

在基于语句的复制中,可能存在复制非确定性语句的问题。在决定某个语句是否适合基于语句的复制时,MySQL会确定是否能够保证使用基于语句的日志记录来复制该语句。如果MySQL无法做出这个保证,它会将该语句标记为潜在不可靠,并发出警告,语句可能不适合在语句格式中记录。

您可以通过使用MySQL的基于行的复制来避免这些问题。