【问题标题】:MySQL clone a table, prune some data and then hotswap their namesMySQL 克隆一个表,修剪一些数据,然后热交换它们的名称
【发布时间】:2011-03-27 23:23:46
【问题描述】:

我们有一个 800 万行的 MySQL 表。我们想从中修剪大约 2m 行,删除一些过时的索引并添加新的索引。为了实现几乎不停机,我们的计划是创建表的克隆(并锁定原始表),运行脚本(Ruby)来修剪我们不再需要的数据,最后添加新索引。然后我们会在 Web 应用程序上放置维护页面,交换它们的名称(通过重命名表)并重新启动应用程序。

这是实现我们最终结果的最佳方式吗?以前有类似情况的人还有其他提示/建议吗?克隆表的最佳方法是什么(超级酷的秘密 mysql cmds)?批量删除行的最佳/最快方法?

【问题讨论】:

  • 执行当前脚本需要多长时间?有什么想法吗?
  • 试图让暂存服务器跟上脚本的时间,但 Amazon EC2 出现容量错误

标签: mysql ruby copy clone


【解决方案1】:
  1. 所有引用都使用视图,而不是直接从old_table 读取
  2. 创建新表
  3. 选择想要的记录到new_table不要带上要删除的记录
  4. 索引new_table
  5. 更新视图,将old_table 引用替换为new_table
  6. 重命名old_table

根据需要处理 old_table。

真正的问题是过渡过程中的新数据,这通常意味着停机。希望您可以禁用添加数据的功能,而不是关闭整个网站。

【讨论】:

  • 如果您想要更快的速度,也可能有一种方法可以直接使用 SQL 来完成这一切......
  • 为什么要使用视图?能不能详细点
  • @Jose Fernandez:因为您可以随意更改视图引用的表;当您在新旧表之间迁移时,现有引用不会被破坏,因为视图封装了。
猜你喜欢
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 2011-12-26
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多