如果复制源服务器不向其二进制日志写入语句,则不会复制该语句。如果服务器确实记录了该语句,则该语句将被发送到所有副本,每个副本决定是执行它还是忽略它。
控件可以控制为哪些数据库记录更改——binlog-do-db
而且——binlog-ignore-db
控制二进制日志记录的选项。有关服务器在计算这些选项时使用的规则的描述,请参见第16.2.5.1节“数据库级复制和二进制日志选项的评估”.您不应该使用这些选项来控制复制哪些数据库和表。相反,可以在副本上使用过滤来控制在副本上执行的事件。
在副本端,决定是执行还是忽略从源接收到的语句是根据——复制- *
副本启动时使用的选项。(见第16.1.6节“复制和二进制日志选项和变量”)。控件动态设置由这些选项控制的筛选器改变复制过滤器
声明。管理这些过滤器的规则是相同的,无论它们是在启动时创建的——复制- *
选项或在副本服务器运行时改变复制过滤器
.注意,复制过滤器不能用于配置为Group replication的MySQL服务器实例,因为过滤某些服务器上的事务将使组无法就一致状态达成一致。
在最简单的情况下,当没有——复制- *
选项,副本将执行从源程序接收到的所有语句。否则,结果取决于给定的特定选项。
数据库级选项(——replicate-do-db
,——replicate-ignore-db
)先检查;看到第16.2.5.1节“数据库级复制和二进制日志选项的评估”,以了解该过程的说明。如果没有使用数据库级选项,选项检查将继续执行到可能正在使用的任何表级选项(参见第16.2.5.2节“表级复制选项的评估”,以讨论这些问题)。如果使用了一个或多个数据库级选项,但没有匹配,则不会复制语句。
对于仅影响数据库的语句(即,创建数据库
,删除数据库
,修改数据库
),数据库级选项总是优先于任何选项——replicate-wild-do-table
选项。换句话说,对于这样的表述,——replicate-wild-do-table
当且仅当没有应用数据库级选项时,将检查选项。这是与以前版本MySQL行为的一个变化,其中语句创建数据库dbx
如果已启动副本,则未复制——replicate-do-db = dbx
——replicate-wild-do-table = db % .t1
.(错误# 46110)
为了更容易地确定选项集的效果,建议避免混合使用”做”而且”忽略”选项,或者通配符和非通配符选项。
如果有任何——replicate-rewrite-db
选项时,它们将应用于——复制- *
测试过滤规则。
所有复制筛选选项都遵循适用于MySQL服务器中其他地方的数据库和表的名称的相同的大小写敏感性规则,包括lower_case_table_names
系统变量。