从大型percona mysql数据库中删除许多行

时间:2016-09-14 11:12:06

标签: mysql sql foreign-keys replication mysql-5.5

我需要对此案提出新的意见。任何想法都表示赞赏。

输入:我们有一个巨大的percona mysql(5.5)数据库,需要几个Tb(太字节)。关于innodb引擎的表。 应尽快删除超过一半(2/3)的大小。 我们还有主从配置。

作为实现这一目标的最快方法,我正在考虑以下解决方案: 对从服务器上的每个表执行(以避免生产停机):

  1. 停止复制
  2. 选择不要删除的行到与原始表
  3. 结构相同的空新表中
  4. 将原始表重命名为“table_old”,将新表重命名为更正名称
  5. 删除原始表格“table_old”
  6. 开始复制
  7. 问题在于我们有很多FK约束。此外,我害怕在此过程中打破复制。

    问题: 1)此解决方案中FK约束的潜在问题是什么? 2)如何不破坏复制? 3)意见?替代解决方案?

    提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果您可以将db脱机(也就是说没有人正在访问除您之外的数据库)一段时间,您可以使用您的解决方案但是您需要先放弃FK并在之后重新创建它们。您还应该检查将通过复制操作更改数字的AUTO_INCREMENT列。

如果你想让db在线,需要FK,我有一些类似的问题,一些巨大的日志表,任何尝试一次删除所有记录可能会锁定数据库或损坏表。

所以我采用了一种缓慢的方法,我创建了一个程序,它将使用聚簇主键从表中删除批量行,然后我将其安排为每n秒运行一次。