【问题标题】:Add a new column in a large mysql table在大型 mysql 表中添加新列
【发布时间】:2009-06-18 22:26:02
【问题描述】:

在大型 mysql 表中添加新列的最快方法是什么?

Alter table add column 创建一个完整表的副本,然后用新创建的表替换旧的。在这个进程运行时,原始表是可读的,但所有的插入和更新都会停止。

在大桌子上,复制可能需要很长时间,有什么办法可以减少它?

【问题讨论】:

标签: mysql performance


【解决方案1】:

您在执行 ALTER TABLE 时卡住了。有效处理此问题的最佳方法是使用 MASTER-MASTER 设置。

您可以先修改 MASTER1,然后在生产中使用 MASTER2。然后你切换并做完全相反的事情。

【讨论】:

    【解决方案2】:

    不要在活动系统上实时执行此操作。对于活动系统,请在关闭系统进行定期维护时执行此操作。

    【讨论】:

    • 可以在从属箱中进行更新,但是有没有非手动的方式来重新创建真正的更新?二进制日志或类似的东西。手动方式是记录每次插入或更新,并以相同的顺序应用。
    【解决方案3】:

    假设一个 INNODB 表:

    1. 将 {Existing Table} 复制到没有数据的 {New Table}(仅架构)
    2. 使用 Alter table 命令在 NEW 表上添加/更改列(应该可以立即使用)
    3. MYSQLDUMP 现有表(使用单事务、--no-drop-table 等)到文件
    4. 将转储文件导入 {New Table}(这可能需要一段时间,但在此期间旧表仍然可用)
    5. 在维护期间,DROP {Old Table} 并将 {New Table} 重命名为以前的 {Old Table}。

    【讨论】:

      猜你喜欢
      • 2012-11-20
      • 2019-01-21
      • 2014-08-30
      • 2021-11-01
      • 2015-06-28
      • 1970-01-01
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多