Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Determination of Safe and Unsafe Statements in Binary Logging

19.2.1.3 确定二进制日志记录中的安全和不安全语句

MySQL 复制中语句的“安全性”指的是语句及其效果是否可以使用语句格式正确地复制。如果语句满足这个条件,我们称其为安全语句;否则,我们称其为不安全语句。

通常情况下,语句是安全的,如果它是确定性的;否则,它是unsafe的。然而,有些非确定性函数不被认为是unsafe(见非确定性函数不被认为是unsafe,在本节后面)。此外,使用浮点数数学函数的语句总是被认为是unsafe(见Section 19.5.1.12, “Replication and Floating-Point Values”)。

处理安全和不安全语句的方法。 语句的处理方式取决于语句是否被认为是安全的,以及与二进制日志格式(即当前的binlog_format值)有关。

  • 在使用行格式日志时,不会根据语句是否安全进行区分。

  • 在使用混合格式日志时,标记为不安全的语句将使用行格式日志,标记为安全的语句将使用语句格式日志。

  • 在使用语句格式日志时,标记为不安全的语句将生成警告。安全语句将被正常记录。

每个标记为不安全的语句都将生成警告。如果在源服务器上执行了大量这样的语句,这可能会导致错误日志文件过大。为了防止这种情况,MySQL 提供了警告抑制机制。每当在 50 秒内生成的 50 个以上的ER_BINLOG_UNSAFE_STATEMENT警告时,这种警告抑制将被激活。激活后,这些警告将不再写入错误日志,而是将写入一个警告,指出在最近 50 秒内生成的警告次数和频率。这种警告抑制机制对语句的安全性判断和客户端收到的警告没有影响。客户端仍然会收到每个语句的警告。

更多信息,请见Section 19.2.1, “Replication Formats”

被认为是unsafe的语句。具有以下特征的语句被认为是unsafe:

更多信息,请见Section 19.5.1, “Replication Features and Issues”