文档首页
MySQL 9.0 参考手册
相关文档 下载此手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  二进制日志中安全和不安全语句的确定

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

在 MySQL 复制中,语句的安全性是指该语句及其效果是否可以使用基于语句的格式正确复制。如果语句满足此条件,则称该语句为安全;否则,称该语句为不安全

一般来说,如果语句是确定性的,则该语句是安全的;如果语句不是确定性的,则该语句是不安全的。但是,某些非确定性函数被视为不安全(请参阅本节后面的不被视为不安全的非确定性函数)。此外,使用浮点数学函数结果的语句(这些函数是硬件相关的)始终被视为不安全(请参阅第 19.5.1.12 节,“复制和浮点数”)。

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

  • 使用基于行的日志记录时,不会区分安全和不安全语句的处理方式。

  • 使用混合格式日志记录时,标记为不安全的语句将使用基于行的格式进行日志记录;被认为安全的语句将使用基于语句的格式进行日志记录。

  • 使用基于语句的日志记录时,标记为不安全的语句会生成一条警告信息。安全语句会正常记录。

每个标记为不安全的语句都会生成一条警告信息。如果在源上执行了大量此类语句,这会导致错误日志文件过大。为了防止这种情况,MySQL 提供了警告抑制机制。每当在任何 50 秒的时间段内生成超过 50 次的 50 个最新的ER_BINLOG_UNSAFE_STATEMENT警告时,就会启用警告抑制。启用此功能后,这些警告不会写入错误日志;相反,每 50 个此类警告,错误日志中会写入一条说明最后的警告在过去的 N 秒内重复了 S。只要在 50 秒或更短时间内发出 50 个最新的此类警告,就会继续这样做;一旦速率低于此阈值,这些警告就会再次正常记录。警告抑制不会影响对基于语句的日志记录语句安全性的确定方式,也不会影响向客户端发送警告的方式。MySQL 客户端仍然会为每个此类语句收到一条警告。

有关更多信息,请参阅第 19.2.1 节,“复制格式”

被视为不安全的语句。 具有以下特征的语句被视为不安全

有关其他信息,请参见 第 19.5.1 节,“复制功能和问题”