我们希望在slave数据库中添加额外的列以进行数据报告,停机时间很短。所以我们使用pt-online-schema-change在slave上运行alter语句。在整个过程中,主数据库上有很多活动应该复制到从数据库。
但是,这会破坏复制,因为复制正在尝试更新slave中不存在的行。然后我发现对于一个表,在pt-online-schema-change期间,大约50%的行不会从master复制到slave。行的丢弃是随机的。在此操作之前,复制工作正常。
奴隶中的另一个表也通过该进程有一个额外的行而不是master,因为我猜删除事件没有在slave上正确保存。
我试图理解为什么在slave上运行pt-online-schema-change不起作用。理论上它应该。我需要设置配置才能使其正常工作吗?或者是不可能做到这一点。令人惊讶的是,mysql复制会丢弃行而不会引发错误,直到对不存在的行进行更新。
附加信息: 值得注意的是我使用了非常高的临界负载值。当我没有指定时,pt-online-schema-change由于threads_running偶尔运行高而死亡。
pt-online-schema-change --critical-load "Threads_running=1000"
答案 0 :(得分:0)
我没有听说过pt-online-schema-change无法复制50%的行的情况。与丢失数据相关的唯一错误是:https://bugs.launchpad.net/percona-toolkit/+bug/1246754,其中涉及向包含重复值的列添加主键约束。
恕我直言,我不建议在奴隶上的表中添加更多列。如果语句或行事件的列数不同,则可能导致复制以多种方式中断。
我将在slave上创建第二个表,并在复制表中以行为一对一的映射。将您的报告数据存储在第二个表格中。