首页 > 解决方案 > 如何重新复制被忽略的表

问题描述

我目前正在考虑以下问题:

客户在两个 mariaDB 系统之间建立了一个简单的主/从复制。由于未知原因,他们设置了标志“Replicate_Wild_Ignore_Table”以跳过“logdb.%”。显然,他们决定跳过该数据库,并希望 logdb 再次包含在复制中。

我现在很好奇,是否有可能以某种方式删除该标志并将有问题的数据库作为其余数据库复制,或者没有办法绕过“停止从属,转储主控,导入转储,基于当前 logpos 重新创建复制,启动奴隶”程序?

标签: mysqlmariadbreplicationdatabase-replication

解决方案


您不能假设 master 仍然拥有所有相关的 binlog,这些 binlog 曾经包含对 logdb.% 表的更新。也就是说,即使您可以重新应用这些更新,您是否有足够的历史记录来说明对表的所有更改?

另一个风险是,如果您使用基于语句的复制,如果曾经有语句同时引用 logdb.% 中的表和另一个数据库中的表,则复制过滤器已跳过该语句。例如:

INSERT INTO mydb.mytable SELECT * FROM logdb.othertable;

因此,即使不在logdb.% 中的表也可能会受到损害。关键是你不确定。

最重要的是,您现在绝对应该通过获取主服务器的当前备份来重新初始化副本,并避免在将来使用复制过滤器。

如果你使用 InnoDB 表,你可以考虑使用 Percona XtraBackup 来简化这个过程。请参阅https://www.percona.com/doc/percona-xtrabackup/2.3/howtos/setting_up_replication.html


推荐阅读