我正在努力使我的开发数据库与我的生产数据库中的数据保持同步。我在pt-table-sync
中发现了Percona Toolkit。
当我运行它时,我经常收到错误Cannot add or update a child row: a foreign key constraint fails
。这种情况发生在经常更新并具有外键的表上。
有没有办法利用这个工具来避免这个问题?我还缺少其他一些工具?数据库非常大。最大的表有近800万行。
答案 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数据库:
对于从生产中复制的每个备份,您可以多次以这种方式重新初始化您的dev数据库。您可以每天获取一次新备份。
作为附带好处,您将养成定期备份数据库的习惯(无论如何应该这样做)。
每次重新初始化dev数据库时,使用pt-table-sync都需要从生产数据库中读取数据。
我不认为800万行的表格非常大。