MySQL复制 - Percona Toolkit表同步 - 外键约束失败

时间:2018-04-03 17:45:11

标签: mysql database-replication percona

我正在努力使我的开发数据库与我的生产数据库中的数据保持同步。我在pt-table-sync中发现了Percona Toolkit

当我运行它时,我经常收到错误Cannot add or update a child row: a foreign key constraint fails。这种情况发生在经常更新并具有外键的表上。

有没有办法利用这个工具来避免这个问题?我还缺少其他一些工具?数据库非常大。最大的表有近800万行。

1 个答案:

答案 0 :(得分:1)

您可以暂时禁用本地开发人员数据库上的外键检查:

mysql> SET GLOBAL FOREIGN_KEY_CHECKS=0;

然后运行pt-table-sync来更改数据,使其与生产数据库同步。

不要忘记重新激活FK检查:

mysql> SET GLOBAL FOREIGN_KEY_CHECKS=1;

编辑:Paul Campbell在上面的评论中正确地指出pt-table-sync有一个--no-foreign-key-checks选项。这会在pt-table-sync连接的会话中禁用FOREIGN_KEY_CHECKS。

但说实话,我不会使用pt-table-sync。这就是我要做的事情:

对我的生产数据库进行完整备份,并将整个备份下载到我的开发本地平台。使用Percona XtraBackup获取生产的物理备份。

然后我可以使用备份重复初始化dev数据库:

  1. 关闭MySQL服务器
  2. 通过MySQL datadir复制备份文件
  3. 启动MySQL服务器
  4. 对于从生产中复制的每个备份,您可以多次以这种方式重新初始化您的dev数据库。您可以每天获取一次新备份。

    作为附带好处,您将养成定期备份数据库的习惯(无论如何应该这样做)。

    每次重新初始化dev数据库时,使用pt-table-sync都需要从生产数据库中读取数据。

    我不认为800万行的表格非常大。