【问题标题】:Delete many rows from a large percona mysql db从大型 percona mysql db 中删除许多行
【发布时间】:2016-09-14 11:12:06
【问题描述】:

我需要对这个案子有新的看法。任何想法表示赞赏。

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

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

  1. 停止复制
  2. 选择不删除的行到与原表结构相同的空新表中
  3. 将原始表重命名为“table_old”,新表 - 更正名称
  4. 删除原始表“table_old”
  5. 开始复制

问题是我们有很多 FK 约束。我也害怕在这个过程中破坏复制。

问题: 1) 在这个解决方案中,FK 约束可能存在哪些潜在问题? 2)如何不中断复制? 3) 意见?替代解决方案?

提前谢谢你。

【问题讨论】:

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


    【解决方案1】:

    如果您可以将数据库离线(也就是除了您之外没有人访问数据库),您可以使用您的解决方案,但您需要删除之前涉及的 FK 并在之后重新创建它们。您还应该检查AUTO_INCREMENT 列,这些列将通过复制操作更改编号。

    如果您希望数据库在线,则需要 FK,我在一些巨大的日志表中遇到了类似的问题,任何尝试一次删除所有记录都可能会锁定数据库或损坏表。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-06
      • 2013-03-08
      • 2017-11-30
      • 2020-02-20
      • 2017-03-30
      • 1970-01-01
      • 2018-07-23
      • 2018-11-03
      相关资源
      最近更新 更多