我有一张大约有 6,000,000 条记录的表。它每隔几个小时备份一次。最近运行该级联的脚本将大约 2,000,000 条旧记录更新为错误值。我已经从备份中提取了那 2,000,000 条记录,并准备好以“INSERT INTO table (col, col) values (val, val)”的形式重新插入它们
现在,我需要一种机制来插入这 2,000,000 条记录,用历史数据替换坏数据,同时维护现有 ID(这意味着 REPLACE 不是一个选项——因为它删除重复项并增加 ID)。此外,我需要在不中断服务器访问太长时间的情况下执行此操作(这意味着 DROP TABLE,然后 --force 欺骗不是一个选项)。
我确定我遗漏了一些东西,但我无法弄清楚如何在当前参数内就地替换。想法?
使用 INSERT (SELECT)...ON DUPLICATE KEY UPDATE 应该允许您访问这些行并使用原始值更新它们。另外,您对 REPLACE 的看法也不正确。这是 pt-table-sync 用来纠正数据漂移的机制。文档详细介绍了 REPLACE == DELETE AND INSERT 但这不在 AUTO_INC 的范围内。
我认为您希望看到类似下面的内容,但这不是行为。
但这并没有发生,正如您从上面看到的那样。