本节提供其他说明以及复制过滤选项的不同组合的用法示例。
下表提供了复制过滤器规则类型的一些典型组合:
条件(选项类型) 结果
完全没有–replicate-选择: 从机执行从主机接收的所有事件。
–replicate--db 选项,但没有表格选项: 从站使用数据库选项接受或忽略事件。因为没有表限制,它将执行那些选项允许的所有事件。
–replicate-*-table 选项,但没有数据库选项: 因为没有数据库条件,所以在数据库检查阶段接受所有事件。从站仅根据表选项执行或忽略事件。
数据库和表选项的组合: 从站使用数据库选项接受或忽略事件。然后,它根据表选项评估这些选项允许的所有事件。有时这会导致结果似乎违反直觉,并且可能会有所不同,具体取决于您使用的是基于语句的复制还是基于行的复制。请参阅文字作为示例。
接下来是一个更复杂的示例,其中我们检查了基于语句的设置和基于行的设置的结果。
假设我们mytbl1在数据库db1和主mytbl2数据库db2上都有两个表,并且从数据库运行以下选项(并且没有其他复制过滤选项):
replicate-ignore-db = db1
replicate-do-table = db2.tbl2
现在,我们在主服务器上执行以下语句:
USE db1;
INSERT INTO db2.tbl2 VALUES (1);
从站上的结果根据二进制日志格式的不同而有很大差异,在两种情况下都可能不符合初始预期。
基于语句的复制。 该USE语句导致 db1成为默认数据库。因此,该 --replicate-ignore-db选项匹配,并且该 INSERT语句被忽略。表格选项未选中。
基于行的复制。 使用基于行的复制时,默认数据库对从属服务器如何读取数据库选项没有影响。因此,该 USE语句在–replicate-ignore-db选项的处理方式上没有区别 :此选项指定的数据库与该INSERT 语句更改数据的数据库不匹配,因此从服务器继续检查表选项。指定 --replicate-do-table的表与要更新的表匹配,并插入行。