文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  服务器如何评估复制过滤规则

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

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

在源上,您可以使用 --binlog-do-db--binlog-ignore-db 选项来控制要记录更改的数据库,以控制二进制日志记录。有关服务器用于评估这些选项的规则的描述,请参见 第 19.2.5.1 节,“评估数据库级复制和二进制日志记录选项”。您不应使用这些选项来控制要复制的数据库和表。相反,请使用副本上的过滤来控制在副本上执行的事件。

在副本端,根据副本启动时使用的 --replicate-* 选项来决定是执行还是忽略从源接收到的语句。(参见 第 19.1.6 节,“复制和二进制日志记录选项和变量”。)这些选项控制的过滤器也可以使用 CHANGE REPLICATION FILTER 语句动态设置。无论是在启动时使用 --replicate-* 选项创建这些过滤器,还是在副本服务器运行时使用 CHANGE REPLICATION FILTER 创建这些过滤器,控制这些过滤器的规则都是相同的。请注意,在配置了组复制的 MySQL 服务器实例上,无法在组复制特定的通道上使用复制过滤器,因为在某些服务器上过滤事务会使组无法就一致状态达成一致。

在最简单的情况下,如果没有 --replicate-* 选项,副本将执行从源接收到的所有语句。否则,结果将取决于提供的特定选项。

数据库级选项 (--replicate-do-db--replicate-ignore-db) 会首先进行检查;有关此过程的描述,请参见 第 19.2.5.1 节,“评估数据库级复制和二进制日志记录选项”。如果没有使用任何数据库级选项,选项检查将继续进行到任何可能正在使用的表级选项(有关这些选项的讨论,请参见 第 19.2.5.2 节,“评估表级复制选项”)。如果使用了一个或多个数据库级选项,但没有匹配任何选项,则该语句不会被复制。

对于仅影响数据库的语句(即,CREATE DATABASEDROP DATABASEALTER DATABASE),数据库级别的选项始终优先于任何 --replicate-wild-do-table 选项。换句话说,对于此类语句,仅当没有适用的数据库级别选项时,才会检查 --replicate-wild-do-table 选项。

为了更容易确定给定选项集的效果,建议您避免混合使用 do-*ignore-* 选项,或者包含通配符的选项与不包含通配符的选项。

如果指定了任何 --replicate-rewrite-db 选项,则在测试 --replicate-* 过滤规则之前应用它们。

注意

所有复制过滤选项都遵循与 MySQL 服务器中其他地方数据库和表名称相同的区分大小写规则,包括 lower_case_table_names 系统变量的影响。

在执行任何权限检查之前应用过滤规则;如果过滤掉一个事务,则不会对该事务执行任何权限检查,因此也不会为此事务引发任何错误。有关更多信息,请参见 第 19.5.1.29 节,“复制期间的副本错误”