【发布时间】:2014-08-28 19:27:35
【问题描述】:
我们想在从属数据库中添加额外的列,以实现数据报告的目的,同时减少停机时间。所以我们使用 pt-online-schema-change 在从站上运行 alter 语句。在整个过程中,主数据库上有很多活动应该复制到从数据库。
但是,这破坏了复制,因为复制试图更新从属服务器中不存在的行。然后我发现对于一个表,在 pt-online-schema-change 期间,大约 50% 的行没有从 master 复制到 slave。行的删除是随机的。在此操作之前,复制工作正常。
slave 中的另一个表也经历了这个过程,比 master 多了一个行,因为我猜一个删除事件没有在 slave 上正确持久化。
我试图理解为什么在 slave 上运行 pt-online-schema-change 不起作用。理论上应该。我需要设置哪些配置才能使其正常工作?或者只是不可能做到这一点。令人惊讶的是,mysql 复制会删除行而不会引发错误,直到对不存在的行进行更新。
附加信息: 需要注意的是,我使用了非常高的临界负载值。当我没有指定时,pt-online-schema-change 由于threads_running 偶尔运行高而死。
pt-online-schema-change --critical-load "Threads_running=1000"
【问题讨论】: