16.2.5.1 评估数据库级复制和二进制日志记录选项

在评估复制选项时,副本首先检查是否有适用的--replicate-do-db--replicate-ignore-db选项。使用--binlog-do-db--binlog-ignore-db时,过程类似,但是在源上检查了选项。

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

Note

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

对于复制,此处列出了涉及的步骤:

  • 使用哪种日志格式?

  • STATEMENT. 测试默认数据库。

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

  • --replicate-do-db个选项吗?

  • 是. 数据库是否与它们匹配?

  • 是. continue 执行步骤 4.

    • 否. 忽略更新并退出。
  • 否. continue 执行步骤 3.

  • --replicate-ignore-db个选项吗?

  • 是. 数据库是否与它们匹配?

  • 是. 忽略更新并退出。

    • 否. continue 执行步骤 4.
  • 否. continue 执行步骤 4.

  • continue 检查 table 级复制选项(如果有)。有关如何检查这些选项的说明,请参见第 16.2.5.2 节“table 级复制选项的评估”

Important

在此阶段仍允许的语句尚未实际执行。在还检查了所有 table 级选项(如果有)之后,该语句才执行,并且该过程的结果允许执行该语句。

对于二进制日志记录,此处列出了涉及的步骤:

  • --binlog-do-db--binlog-ignore-db选项吗?

  • 是. continue 执行步骤 2.

  • 否. 记录语句并退出。

  • 是否有默认数据库(USE是否选择了任何数据库)?

  • 是. continue 执行步骤 3.

  • 否. 忽略该语句并退出。

  • 没有默认数据库。有--binlog-do-db个选项吗?

  • 是. 它们中的任何一个都与数据库匹配吗?

  • 是. 记录语句并退出。

    • 否. 忽略该语句并退出。
  • 否. continue 执行步骤 4.

  • --binlog-ignore-db选项是否与数据库匹配?

  • 是. 忽略该语句并退出。

  • 否. 记录语句并退出。

Important

对于基于语句的日志记录,仅在为CREATE DATABASEALTER DATABASEDROP DATABASE语句指定的规则中有 exception。在这些情况下,确定,记录或忽略更新时,正在创建,更改或删除*的数据库将替换默认数据库。

--binlog-do-db有时可以 table 示“忽略其他数据库”。例如,当使用基于语句的日志记录时,仅使用--binlog-do-db=sales运行的服务器不会写入默认数据库不同于sales的二进制日志语句。当使用具有相同选项的基于行的日志记录时,服务器仅记录那些更改sales中的数据的更新。