19.2.5.1 数据库级别 复制 和二进制日志选项评估
当评估复制选项时,复制服务器首先检查是否存在任何--replicate-do-db
或--replicate-ignore-db
选项。如果使用--binlog-do-db
或--binlog-ignore-db
,则过程类似,但选项将在源服务器上检查。
要检查的数据库取决于语句的二进制日志格式。如果语句已使用行格式记录,则要更改的数据库是要检查的数据库。如果语句已使用语句格式记录,则默认数据库(使用USE
语句指定的数据库)是要检查的数据库。
只有DML语句可以使用行格式记录。DDL语句总是以语句格式记录,即使binlog_format=ROW
。因此,您必须使用USE
语句明确指定默认数据库,以便DDL语句生效。
对于复制,步骤如下:
-
使用哪种日志格式?
-
STATEMENT. 测试默认数据库。
-
ROW. 测试要更改的数据库。
-
-
是否存在
--replicate-do-db
选项?-
是. 是否与其中之一匹配?
-
是. 继续到步骤4。
-
否. 忽略更新并退出。
-
-
否. 继续到步骤3。
-
-
是否存在
--replicate-ignore-db
选项?-
是. 是否与其中之一匹配?
-
是. 忽略更新并退出。
-
否. 继续到步骤4。
-
-
否. 继续到步骤4。
-
-
继续检查表级别复制选项,如果存在任何。关于这些选项的检查方法,请参阅第19.2.5.2节,“表级别复制选项评估”。
Important仍然允许的语句尚未实际执行。语句直到所有表级别选项(如果存在)都已经检查,并且该过程允许语句执行时才实际执行语句。
对于二进制日志,步骤如下:
-
是否存在
--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
时,不会将default数据库不同于sales
的语句写入到二进制日志中。使用同样选项时,服务器将只记录在sales
中的更新。