我有一个维护 cron 作业脚本,每 5 分钟运行一次,它会截断一个表,用维护数据重新填充它,然后在最后截断它。我还每天运行一个 mysqldump 脚本来备份我的所有表。我最近注意到备份中缺少一些表。经过进一步调查,我发现 mysqldump 抛出了这个错误:
Error 1412 "Table Definition Has Changed"
进一步研究之后,显然是因为我的 cron 作业脚本在 mysqldump 备份中间使用 TRUNCATE 清空表造成的。
我正在使用 --single-transaction 选项,但没有什么区别。
是否有某种方法可以让 mysqldump 继续运行,即使表在 mysqldump 运行时被截断(并且仍然备份该表)?这需要在没有 --ignore-table 选项的情况下完成。我知道如何做到这一点,但宁愿将所有维护表都包含在备份中,以防数据库必须从备份中完全恢复。
我能想到的唯一其他事情是使用“DELETE FROM table”而不是“TRUNCATE table”,但我必须检查所有网站上的所有脚本才能改变这一点。