### 17.2.5 服务器如何评估复制过滤规则

[17.2.5.1 评估数据库级复制和二进制日志选项](replication-rules-db-options.html)
[17.2.5.2 表级复制选项的评估](replication-rules-table-options.html)
[17.2.5.3 复制过滤选项之间的交互](replication-rules-examples.html)
[17.2.5.4 基于复制通道的过滤器](replication-rules-channel-based-filters.html)

如果复制源服务器没有将语句写入其二进制日志，则不会复制该语句。如果服务器确实记录了该语句，则该语句被发送到所有副本，每个副本决定是执行它还是忽略它。

在源上，您可以通过使用[`--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)控制二进制日志记录的选项。有关服务器在评估这些选项时使用的规则的描述，请参阅[第 17.2.5.1 节，“评估数据库级复制和二进制日志记录选项”](replication-rules-db-options.html).您不应使用这些选项来控制复制哪些数据库和表。相反，对副本使用过滤来控制在副本上执行的事件。

在副本方面，是否执行或忽略从源接收到的语句的决定是根据`- 复制-*`副本启动时使用的选项。（看[第 17.1.6 节，“复制和二进制日志记录选项和变量”](replication-options.html).) 由这些选项控制的过滤器也可以使用`更改复制过滤器`陈述。管理此类过滤器的规则是相同的，无论它们是在启动时使用`- 复制-*`选项或在副本服务器运行时`更改复制过滤器`.请注意，复制过滤器不能用于为组复制配置的 MySQL 服务器实例上的组复制特定通道，因为过滤某些服务器上的事务会使组无法就一致状态达成一致。

在最简单的情况下，当没有`- 复制-*`选项，副本执行它从源接收到的所有语句。否则，结果取决于给定的特定选项。

数据库级选项 ([`--replicate-do-db`](replication-options-replica.html#option_mysqld_replicate-do-db),[`--replicate-ignore-db`](replication-options-replica.html#option_mysqld_replicate-ignore-db)) 首先检查；看[第 17.2.5.1 节，“评估数据库级复制和二进制日志记录选项”](replication-rules-db-options.html), 来描述这个过程。如果没有使用数据库级选项，则选项检查会继续检查可能正在使用的任何表级选项（请参阅[第 17.2.5.2 节，“表级复制选项的评估”](replication-rules-table-options.html)，讨论这些）。如果使用了一个或多个数据库级选项但没有一个匹配，则不会复制该语句。

对于仅影响数据库的语句（即[`创建数据库`](create-database.html),[`删除数据库`](drop-database.html)， 和[`更改数据库`](alter-database.html))，数据库级选项总是优先于任何[`--replicate-wild-do-table`](replication-options-replica.html#option_mysqld_replicate-wild-do-table)选项。换句话说，对于这样的陈述，[`--replicate-wild-do-table`](replication-options-replica.html#option_mysqld_replicate-wild-do-table)当且仅当没有适用的数据库级选项时，才会检查选项。

为了更容易确定给定的一组选项有什么影响，建议您避免混合`做-*`和`忽视-*`选项，或包含通配符的选项和不包含通配符的选项。

如果有的话[`--replicate-rewrite-db`](replication-options-replica.html#option_mysqld_replicate-rewrite-db)选项被指定，它们在`- 复制-*`过滤规则被测试。

[](<>)[](<>)

笔记

所有复制过滤选项都遵循相同的区分大小写规则，适用于 MySQL 服务器中其他地方的数据库和表的名称，包括[`lower_case_table_names`](server-system-variables.html#sysvar_lower_case_table_names)系统变量。
