如何在不停机的情况下删除数百万条 MySQL 行
面对导致数百万重复行的 bug,找到删除最大限度地减少停机时间的策略至关重要。
一种选择是在循环中执行大量较小的删除查询。但是,这种方法可能会给数据库带来压力并延长删除过程。
另一种选择是重命名现有表,创建一个新的空表,对重命名的表执行清理,然后将数据合并回原始表。虽然这种方法提供了最小的中断,但它带来了逻辑挑战,包括潜在的数据丢失和需要细致的数据合并。
更有效的解决方案是循环执行以下查询,并具有较短的睡眠时间迭代之间:
DELETE FROM `table` WHERE (whatever criteria) ORDER BY `id` LIMIT 1000
通过将一次删除限制为 1000 行并添加较短的睡眠间隔,此技术允许其他查询交错并防止表锁定。随着迭代的继续,受影响的行数将逐渐减少,直到为零。
这种方法将效率与最少的停机时间结合起来,使其成为删除大量行而不破坏站点功能或用户体验的合适选择。
以上是如何在不停机的情况下删除数百万条 MySQL 行?的详细内容。更多信息请关注PHP中文网其他相关文章!