在评估复制选项时,副本首先检查是否有
适用--replicate-do-db
的
--replicate-ignore-db
选项。使用
--binlog-do-db
or
--binlog-ignore-db
时,过程类似,但会在源上检查选项。
检查匹配的数据库取决于正在处理的语句的二进制日志格式。如果该语句已使用行格式记录,则要更改数据的数据库是检查的数据库。如果语句已使用语句格式记录,则默认数据库(用
USE
语句指定)是被检查的数据库。
只能使用行格式记录 DML 语句。DDL 语句始终记录为语句,即使在
binlog_format=ROW
. 因此,所有 DDL 语句始终根据基于语句的复制规则进行过滤。这意味着您必须使用
USE
语句显式选择默认数据库,以便应用 DDL 语句。
对于复制,此处列出了所涉及的步骤:
使用哪种日志记录格式?
陈述。 测试默认数据库。
排。 测试受更改影响的数据库。
有什么
--replicate-do-db
选择吗?是的。 数据库是否匹配其中任何一个?
是的。 继续第 4 步。
否。 忽略更新并退出。
否 。继续第 3 步。
有什么
--replicate-ignore-db
选择吗?是的。 数据库是否匹配其中任何一个?
是的。 忽略更新并退出。
否 。继续第 4 步。
否 。继续第 4 步。
继续检查表级复制选项(如果有)。有关如何检查这些选项的说明,请参阅 第 16.2.5.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
。