10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 41.6 mb
PDF (A4)- 41.7 mb
手册页(TGZ)- 262.2 kb
手册页(邮政编码)- 372.3 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册的摘录

17.2.5.3复制过滤选项交互

如果您组合使用数据库级和表级复制过滤选项,那么副本首先接受或忽略使用数据库选项的事件,然后根据表选项计算这些选项允许的所有事件。这有时会导致看起来违反直觉的结果。还需要注意的是,根据使用基于语句还是基于行的二进制日志格式记录操作,结果会有所不同。如果希望确保复制筛选器始终以独立于二进制日志格式的相同方式运行(如果使用混合二进制日志格式,这一点尤其重要),请遵循本主题中的指导。

由于识别数据库名称的方式不同,复制过滤选项的效果在二进制日志记录格式之间是不同的。使用基于语句的格式时,DML语句是根据当前数据库处理的,由使用声明。使用基于行格式时,DML语句是根据已修改表所在的数据库来处理的。属性指定的DDL语句总是基于当前数据库进行过滤使用语句,与二进制日志记录格式无关。

根据二进制日志记录格式的不同,复制过滤选项也会对涉及多个表的操作产生不同的影响。要注意的操作包括涉及多表的事务更新语句、触发器、级联外键、更新多个表的存储函数,以及调用更新一个或多个表的存储函数的DML语句。如果这些操作同时更新过滤入和过滤出的表,则结果可能因二进制日志记录格式的不同而不同。

如果您需要保证无论二进制日志格式如何,复制筛选器都能一致地运行,特别是在使用混合二进制日志格式时(binlog_format =混合),只使用表级复制筛选选项,不使用数据库级复制筛选选项。另外,不要使用同时更新过滤入表和过滤出表的多表DML语句。

如果需要组合使用数据库级和表级复制筛选器,并希望它们尽可能一致地运行,请选择以下策略之一:

  1. 如果使用基于行的二进制日志记录格式(binlog_format =行,对于DDL语句,依赖于使用语句设置数据库,但不指定数据库名称。您可以考虑更改为基于行的二进制日志记录格式,以提高复制过滤的一致性。看到第5.4.4.2节“设置二进制日志格式”用于更改二进制日志记录格式的条件。

  2. 如果您使用基于语句或混合二进制日志记录格式(binlog_format =声明混合,对于DML和DDL语句,都依赖于使用语句,并且不使用数据库名称。另外,不要使用同时更新过滤入表和过滤出表的多表DML语句。

17.7的例子——replicate-ignore-db选择和一个——replicate-do-table选项

在复制源服务器上,会发出以下语句:

使用db1;像t1一样创建表t2插入到db2。t3值(1);

副本设置了以下复制过滤选项:

replication -do-table = db2.t3

DDL语句创建表db1,由上列明使用声明。副本根据它的——replicate-ignore-db = db1选择,因为db1是当前数据库。无论复制源服务器上的二进制日志格式是什么,这个结果都是相同的。但是,DML的结果插入语句的不同取决于二进制日志记录格式:

如果——replicate-ignore-db = db1选项是必须的,并且在源上使用基于语句的(或混合的)二进制日志记录格式也是必要的,通过省略数据库名称,可以使结果保持一致插入陈述和依赖于a使用声明如下:

使用db1;像t1一样创建表t2使用db2;INSERT INTO t3 VALUES (1);

在这种情况下,副本总是计算插入基于数据库的语句db2.无论操作是以基于语句还是基于行的二进制格式记录的,结果都是相同的。