MySQL 8.0 参考手册  / 第十七章复制  / 17.2 复制实现  / 17.2.5 服务器如何评估复制过滤规则  /  17.2.5.1 数据库级复制和二进制日志选项的评估

17.2.5.1 数据库级复制和二进制日志选项的评估

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

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

笔记

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

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

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

    • 陈述。  测试默认数据库。

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

  2. 有什么 --replicate-do-db选择吗?

    • 是的。  数据库是否匹配其中任何一个?

      • 是的。  继续第 4 步。

      • 否。  忽略更新并退出。

    • 否  。继续第 3 步。

  3. 有什么 --replicate-ignore-db 选择吗?

    • 是的。  数据库是否匹配其中任何一个?

      • 是的。  忽略更新并退出。

      • 否  。继续第 4 步。

    • 否  。继续第 4 步。

  4. 继续检查表级复制选项(如果有)。有关如何检查这些选项的说明,请参阅 第 17.2.5.2 节,“表级复制选项的评估”

    重要的

    在此阶段仍然允许的语句尚未实际执行。在检查了所有表级选项(如果有的话)并且该过程的结果允许执行该语句之前,不会执行该语句。

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

  1. 有什么--binlog-do-db 选择--binlog-ignore-db 吗?

    • 是的。  继续第 2 步。

    • 否。  记录语句并退出。

  2. 是否有默认数据库(有没有选择数据库USE)?

    • 是的。  继续第 3 步。

    • 否。  忽略声明并退出。

  3. 有一个默认数据库。有什么 --binlog-do-db选择吗?

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

      • 是的。  记录语句并退出。

      • 否。  忽略声明并退出。

    • 否  。继续第 4 步。

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

    • 是的。  忽略声明并退出。

    • 否。  记录语句并退出。

重要的

CREATE DATABASE对于基于语句的日志记录,在刚刚为、ALTER DATABASEDROP DATABASE语句 给出的规则中有一个例外。在这些情况下,正在创建、更改或删除 的数据库会在确定是记录还是忽略更新时替换默认数据库。

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