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 级选项(如果有)之后,该语句才执行,并且该过程的结果允许执行该语句。
对于二进制日志记录,此处列出了涉及的步骤:
-
是. continue 执行步骤 2.
-
否. 记录语句并退出。
-
是否有默认数据库(USE是否选择了任何数据库)?
-
是. continue 执行步骤 3.
-
否. 忽略该语句并退出。
-
没有默认数据库。有--binlog-do-db个选项吗?
-
是. 它们中的任何一个都与数据库匹配吗?
-
是. 记录语句并退出。
- 否. 忽略该语句并退出。
-
否. continue 执行步骤 4.
-
--binlog-ignore-db选项是否与数据库匹配?
-
是. 忽略该语句并退出。
-
否. 记录语句并退出。
Important
对于基于语句的日志记录,仅在为CREATE DATABASE,ALTER DATABASE和DROP DATABASE语句指定的规则中有 exception。在这些情况下,确定,记录或忽略更新时,正在创建,更改或删除*的数据库将替换默认数据库。
--binlog-do-db有时可以 table 示“忽略其他数据库”。例如,当使用基于语句的日志记录时,仅使用--binlog-do-db=sales运行的服务器不会写入默认数据库不同于sales
的二进制日志语句。当使用具有相同选项的基于行的日志记录时,服务器仅记录那些更改sales
中的数据的更新。