在MySQL中更新/重建表的最佳方法

时间:2012-09-21 18:22:01

标签: mysql database web-services

我正在开发一个大型的webapp,其中包括一个基于现有数据在线构建的表格。此数据集可能会更改(尽管可能不常见),因此我们的总体计划是每1-2个月更新/重建一次。这将通过Python与SQLAlchemy

发生

在处理Web应用程序和大型数据库方面经验不足,最好的方法是什么?从头开始构建数据库需要5-6个小时,老实说,这是可接受的停机时间(它是一个科学的分析服务器)。当然,另一种选择是并行创建第二个表,然后删除原始表并重命名新表,但这是否存在一致性问题?有没有办法“实时更新”一个表,或者这里发生崩溃的风险是不值得的(即如果你崩溃让桌子处于与真实数据不一致的状态)?

显然,在简单性,安全性和缺乏停机时间之间存在折衷,但我只是对我的选择感兴趣(为了解决这些问题,“未知的未知数”)。

2 个答案:

答案 0 :(得分:1)

以下是我的建议:

  1. 使用mysqldump备份原始表

  2. 以不同的名称构建新表

  3. 使用mysqldump备份新表

  4. 关闭您的申请

  5. 删除旧表

  6. 将新表重命名为原始表名

  7. 重新启动您的应用

  8. 这应该产生最小的停机时间,只需要删除旧表并重命名旧表所需的时间。备份可以让您在安全的情况下获得安全保障。

答案 1 :(得分:0)

这个怎么样

RENAME TABLE old_table TO tmp_table,              new_table TO old_table;

之前创建的new_table。 RENAME是原子的