文档首页
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.5.1 数据库级别复制和二进制日志选项的评估

在评估复制选项时,副本首先检查是否存在任何 --replicate-do-db--replicate-ignore-db 选项。在使用 --binlog-do-db--binlog-ignore-db 时,过程类似,但选项在源上进行检查。

要检查匹配的数据库取决于正在处理的语句的二进制日志格式。如果语句使用行格式进行日志记录,则要检查的数据库是数据将要更改的数据库。如果语句使用语句格式进行日志记录,则要检查的数据库是默认数据库(使用 USE 语句指定)。

注意

只有 DML 语句可以使用行格式进行日志记录。DDL 语句始终以语句的形式进行日志记录,即使 binlog_format=ROW 也是如此。因此,所有 DDL 语句始终根据基于语句的复制规则进行过滤。这意味着您必须使用 USE 语句显式选择默认数据库,才能应用 DDL 语句。

对于复制,所涉及的步骤如下所示

  1. 使用哪种日志记录格式?

    • STATEMENT.  测试默认数据库。

    • ROW.  测试受更改影响的数据库。

  2. 是否存在任何 --replicate-do-db 选项?

    • 是.  数据库是否与其中任何一个匹配?

      • 是.  继续执行步骤 4。

      • 否.  忽略更新并退出。

    • 否.  继续执行步骤 3。

  3. 是否存在任何 --replicate-ignore-db 选项?

    • 是.  数据库是否与其中任何一个匹配?

      • 是.  忽略更新并退出。

      • 否.  继续执行步骤 4。

    • 否.  继续执行步骤 4。

  4. 如果存在任何表级别复制选项,则继续检查这些选项。有关如何检查这些选项的说明,请参见 第 19.2.5.2 节,“表级别复制选项的评估”

    重要

    在当前阶段仍然允许的语句尚未实际执行。只有在检查完所有表级别选项(如果有)之后,并且该过程的结果允许执行语句时,才会执行语句。

对于二进制日志记录,所涉及的步骤如下所示

  1. 是否存在任何 --binlog-do-db--binlog-ignore-db 选项?

    • 是.  继续执行步骤 2。

    • 否.  记录语句并退出。

  2. 是否存在默认数据库(是否使用 USE 选择了任何数据库)?

    • 是.  继续执行步骤 3。

    • 编号.  忽略语句并退出。

  3. 存在默认数据库。是否存在任何--binlog-do-db 选项?

    • 是.  其中是否有任何与该数据库匹配?

      • 是.  记录语句并退出。

      • 编号.  忽略语句并退出。

    • 否.  继续执行步骤 4。

  4. 是否存在任何--binlog-ignore-db 选项与该数据库匹配?

    • 是.  忽略语句并退出。

    • 否.  记录语句并退出。

重要

对于基于语句的日志记录,在刚刚给出的规则中,针对CREATE DATABASEALTER DATABASEDROP DATABASE 语句做出了例外。在这些情况下,创建、修改或删除 的数据库将替换默认数据库,用于确定是否记录或忽略更新。

--binlog-do-db 有时可能意味着 忽略其他数据库。例如,在使用基于语句的日志记录时,仅运行 --binlog-do-db=sales 的服务器不会将默认数据库与 sales 不同的语句写入二进制日志。在使用基于行的日志记录以及相同的选项时,服务器仅记录更改了 sales 中数据的那些更新。