当评估复制选项,从一开始就检查,看看是否有任何 --replicate-do-db或 --replicate-ignore-db适用的选项。使用 --binlog-do-db或时 --binlog-ignore-db,过程类似,但是在母版上检查了选项。
检查数据库是否匹配取决于所处理语句的二进制日志格式。如果该语句已使用行格式记录,则要在其中更改数据的数据库是已检查的数据库。如果已使用语句格式记录了该语句,则默认数据库(使用USE语句指定 )是已检查的数据库。
注意
使用行格式只能记录DML语句。DDL语句始终记录为语句,即使 binlog_format=ROW。因此,始终会根据基于语句的复制规则来过滤所有DDL语句。这意味着您必须使用USE语句明确选择默认数据库 ,才能应用DDL语句。
对于复制,此处列出了涉及的步骤:
使用哪种日志格式?
声明。 测试默认数据库。
行。 测试受更改影响的数据库。
有什么 --replicate-do-db选择吗?
是。 数据库是否与它们中的任何一个匹配?
是。 继续执行步骤4。
否。 忽略更新并退出。
否。 继续执行步骤3。
有什么 --replicate-ignore-db 选择吗?
是。 数据库是否与它们中的任何一个匹配?
是。 忽略更新并退出。
否。 继续执行步骤4。
否。 继续执行步骤4。
继续检查表级复制选项(如果有)。有关如何检查这些选项的描述,请参见 第17.2.3.2节“表级复制选项的评估”。
重要
在此阶段仍允许的语句尚未实际执行。在还检查了所有表级选项(如果有)之后,该语句才执行,并且该过程的结果允许执行该语句。
对于二进制日志记录,此处列出了涉及的步骤:
是否有任何–binlog-do-db 或–binlog-ignore-db 选择?
是。 继续执行步骤2。
否。 记录该语句并退出。
是否存在默认数据库(是否选择了任何数据库USE)?
是。 继续执行步骤3。
否。 忽略该语句并退出。
没有默认数据库。有什么 --binlog-do-db选择吗?
是。 它们是否与数据库匹配?
是。 记录该语句并退出。
否。 忽略该语句并退出。
否。 继续执行步骤4。
是否有任何 --binlog-ignore-db选项与数据库匹配?
是。 忽略该语句并退出。
否。 记录该语句并退出。
重要
对于基于语句的日志记录,一个例外是只为给定的规则做CREATE DATABASE,ALTER DATABASE和DROP DATABASE声明。在这些情况下, 在确定是记录日志还是忽略更新时,正在创建,更改或删除的数据库将替换默认数据库。
–binlog-do-db有时可能意味着 “ 忽略其他数据库 ”。例如,当使用基于语句的日志记录时,仅运行的服务器 --binlog-do-db=sales不会写入默认数据库不同于的二进制日志语句sales。当使用具有相同选项的基于行的日志记录时,服务器仅记录那些更改数据的更新sales。




