mysql - 使用 pt-online-schema-change 在从属数据库中添加列导致删除行

标签 mysql database percona

我们希望在从属数据库中添加额外的列,以实现数据报告目的,同时减少停机时间。因此,我们使用 pt-online-schema-change 在从属设备上运行 alter 语句。在整个过程中,主数据库上有很多事件应该复制到从数据库。

但是,这会破坏复制,因为复制正在尝试更新从属中不存在的行。然后我发现,对于一张表,在 pt-online-schema-change 期间,大约 50% 的行没有从 master 复制到从属。行的丢弃是随机的。在此操作之前,复制工作正常。

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

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

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

pt-online-schema-change --critical-load "Threads_running=1000" 

最佳答案

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

恕我直言,我不建议在从站上的表中添加更多列。如果语句或行事件没有相同的列数,可能会导致复制以多种方式中断。

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

关于mysql - 使用 pt-online-schema-change 在从属数据库中添加列导致删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25556551/

相关文章:

php - 连接到 WordPress 服务器中的 mysql 数据库

mysql - 查找具有相同列值的多行的 SQL 查询

php - MongoDB - 将数据从一个集合传输到另一个集合

mysql - 最近在生产中遇到 Rails-Mysql 连接问题

mysql - 如何使用 .mylogin.cnf 自动执行 mysqladmin 和 mysql_secure_installation 查询?

mysql - 在 MYSQL 中将 44 替换为 0?

mysql - 使用ROR时遇到很多问题

mysql - sql COUNT 出现问题

java - 通过 java.sql.PreparedStatement.setBytes 进行 BINARY 比较时的空结果集

如果日期不存在,MySQL 选择具有预定义值的日期