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

在评估复制选项时，副本首先检查是否有任何[`--replicate-do-db`](replication-options-replica.html#option_mysqld_replicate-do-db)要么[`--replicate-ignore-db`](replication-options-replica.html#option_mysqld_replicate-ignore-db)适用的选项。使用时[`--binlog-do-db`](replication-options-binary-log.html#option_mysqld_binlog-do-db)要么[`--binlog-ignore-db`](replication-options-binary-log.html#option_mysqld_binlog-ignore-db)，过程类似，但在源上检查选项。

检查匹配的数据库取决于正在处理的语句的二进制日志格式。如果语句已使用行格式记录，则要更改数据的数据库是检查的数据库。如果语句已使用语句格式记录，则默认数据库（用[`采用`](use.html)statement) 是被检查的数据库。

笔记

只能使用行格式记录 DML 语句。DDL 语句始终记录为语句，即使在[`binlog_format=行`](replication-options-binary-log.html#sysvar_binlog_format).因此，始终根据基于语句的复制规则过滤所有 DDL 语句。这意味着您必须使用[`采用`](use.html)语句，以便应用 DDL 语句。

对于复制，此处列出了涉及的步骤：

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

    -   **陈述。**测试默认数据库。

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

2.  有没有[`--replicate-do-db`](replication-options-replica.html#option_mysqld_replicate-do-db)选项？

    -   **是的。**数据库是否与其中任何一个匹配？

        -   **是的。**继续执行步骤 4。

        -   **不。**忽略更新并退出。

    -   **不。**继续第 3 步。

3.  有没有[`--replicate-ignore-db`](replication-options-replica.html#option_mysqld_replicate-ignore-db)选项？

    -   **是的。**数据库是否与其中任何一个匹配？

        -   **是的。**忽略更新并退出。

        -   **不。**继续执行步骤 4。

    -   **不。**继续执行步骤 4。

4.  继续检查表级复制选项（如果有）。有关如何检查这些选项的说明，请参阅[第 17.2.5.2 节，“表级复制选项的评估”](replication-rules-table-options.html).

    重要的

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

    对于二进制日志记录，此处列出了所涉及的步骤：

5.  有没有[`--binlog-do-db`](replication-options-binary-log.html#option_mysqld_binlog-do-db)要么[`--binlog-ignore-db`](replication-options-binary-log.html#option_mysqld_binlog-ignore-db)选项？

    -   **是的。**继续第 2 步。

    -   **不。**记录语句并退出。

6.  是否有默认数据库（是否已选择任何数据库[`采用`](use.html))?

    -   **是的。**继续第 3 步。

    -   **不。**忽略该语句并退出。

7.  有一个默认数据库。有没有[`--binlog-do-db`](replication-options-binary-log.html#option_mysqld_binlog-do-db)选项？

    -   **是的。**它们中的任何一个与数据库匹配吗？

        -   **是的。**记录语句并退出。

        -   **不。**忽略该语句并退出。

    -   **不。**继续执行步骤 4。

8.  做任何[`--binlog-ignore-db`](replication-options-binary-log.html#option_mysqld_binlog-ignore-db)选项匹配数据库？

    -   **是的。**忽略该语句并退出。

    -   **不。**记录语句并退出。

重要的

对于基于语句的日志记录，刚刚为[`创建数据库`](create-database.html),[`更改数据库`](alter-database.html)， 和[`删除数据库`](drop-database.html)陈述。在这些情况下，数据库正在*创建、更改或删除*在确定是否记录或忽略更新时替换默认数据库。

[`--binlog-do-db`](replication-options-binary-log.html#option_mysqld_binlog-do-db)有时可能意味着“忽略其他数据库”。例如，当使用基于语句的日志记录时，服务器只运行[`--binlog-do-db=销售`](replication-options-binary-log.html#option_mysqld_binlog-do-db)不写入与默认数据库不同的二进制日志语句`销售量`.当使用具有相同选项的基于行的日志记录时，服务器只记录那些更改数据的更新`销售量`.
