17.2.3.1 Evaluation of Database-Level Replication and Binary Logging Options
17.2.3.2 Evaluation of Table-Level Replication Options
17.2.3.3 Replication Rule Application
如果主服务器未在其二进制日志中写入一条语句,则不会复制该语句。如果服务器确实记录了该语句,则该语句将发送到所有从属服务器,并且每个从属服务器都决定执行该语句还是忽略它。
在主服务器上,您可以使用–binlog-do-db和 --binlog-ignore-db选项控制二进制日志,从而控制要记录更改的数据库。有关服务器评估这些选项时使用的规则的说明,请参见 第17.2.3.1节“数据库级复制和二进制日志记录选项的评估”。您不应使用这些选项来控制要复制的数据库和表。而是在从属服务器上使用筛选来控制在从属服务器上执行的事件。
在从属方,根据–replicate-*是从属方启动的选项来决定是执行还是忽略从主控方收到的语句 。(请参见第17.1.4节“复制和二进制日志记录选项和变量”。)
在最简单的情况下,当没有 --replicate-*选项时,从站将执行从主站接收的所有语句。否则,结果取决于给定的特定选项。
首先检查 数据库级别的选项(–replicate-do-db, --replicate-ignore-db);有关此过程的说明,请参见第17.2.3.1节“数据库级复制和二进制日志记录选项的评估”。如果未使用数据库级选项,则选项检查将转到可能正在使用的任何表级选项(有关这些选项的讨论,请参见第17.2.3.2节“表级复制选项的评估”)。如果使用了一个或多个数据库级选项,但没有一个被匹配,则不会复制该语句。
对于仅影响数据库语句(即 CREATE DATABASE, DROP DATABASE和 ALTER DATABASE),数据库级选项总是优先于任何 --replicate-wild-do-table选项。换句话说,对于此类语句, --replicate-wild-do-table仅当没有适用的数据库级选项时才检查选项。这是对MySQL CREATE DATABASE dbx早期版本的行为更改,在以前的版本中,如果从站以开头,则不会复制该语句 。(缺陷#46110) --replicate-do-db=dbx --replicate-wild-do-table=db%.t1
为了更容易确定选项集将产生什么影响,建议您避免混合使用“ do ” 和“ ignore ”选项,或通配符和非通配符选项。
如果–replicate-rewrite-db 指定了任何选项,则会在–replicate-*测试过滤规则之前应用它们 。
注意
在MySQL 5.6中,所有复制过滤选项均遵循相同的规则,以区分大小写,该规则适用于MySQL服务器中其他位置的数据库和表的名称,包括lower_case_table_names系统变量的影响 。
这是对MySQL早期版本的更改。(缺陷#51639)




