使用pt-online-schema-change在从数据库中添加列,导致行丢失

问题描述 投票:0回答:1

我们希望在从属数据库中添加额外的列以用于数据报告,而停机时间很少。因此,我们使用了pt-online-schema-change在从站上运行alter语句。在整个过程中,主数据库上有许多活动应复制到从数据库。

但是,这中断了复制,因为复制正在尝试更新从属服务器中不存在的行。然后我发现,对于一张表,在pt-online-schema更改期间,大约50%的行没有从master复制到slave。行的删除是随机的。在执行此操作之前,复制运行良好。

从属设备中的另一个表也要经过该过程,所以它比主设备多了一行,因为我猜想删除事件没有正确地保留在从属设备上。

我试图了解为什么在从属服务器上运行pt-online-schema-change无效。从理论上讲应该如此。我需要设置一些配置才能使其正常工作吗?还是不可能做到这一点。令人惊讶的是,mysql复制将删除行而不会引发错误,直到对不存在的行进行更新为止。

附加信息:需要注意的是,我使用了很高的临界负载值。当我没有指定时,pt-online-schema-change会死于threads_running偶尔运行得很高。

pt-online-schema-change --critical-load "Threads_running=1000" 
mysql database percona
1个回答
0
投票

我还没有听说过pt-online-schema-change无法复制50%的行的情况。与数据丢失有关的唯一错误是:https://bugs.launchpad.net/percona-toolkit/+bug/1246754,其中涉及向包含重复值的列添加主键约束。

恕我直言,无论如何,我不建议向从属服务器上的表添加更多列。如果语句或行事件的列数不同,则复制可能会以多种方式中断。

我将在副本上创建第二个表,并以一对一的方式映射到复制表中的行。将报告数据存储在第二个表中。

© www.soinside.com 2019 - 2024. All rights reserved.