在大型mysql表中添加新列

问题描述:

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

改变表添加列创建完整表的副本,然后用新的创建表替换旧表。在此过程正在运行时,原始表格可读,但所有插入和更新都停止。

在大型表格上,副本可能需要很长时间,有什么方法可以减少它?

+0

相关问题:http://*.com/questions/1645215/how-do-i-add-a-column-to-large-sql-server-table – 2011-05-19 18:38:42

+1

考虑调整innodb_log_file_size(但要小心,请参阅http://www.mysqlperformanceblog.com/2011/07/09/how-to-change-innodb_log_file_size-safely/)和innodb_log_buffer_size。有关更多信息,请参阅此处的答案:http://*.com/a/12688184/1148030 – 2012-10-02 10:07:03

你被困在做ALTER TABLE。有效处理此问题的最佳方法是使用MASTER-MASTER设置。

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

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

假设一个InnoDB表:

  1. 复制{现有表}到{新表}无数据(仅架构)
  2. 使用alter table命令来添加/修改的新表列(应该工作在一瞬间)
  3. MYSQLDUMP现有表(使用单一事务,--no-drop-table等)到文件
  4. 导入转储文件到{新表}(这可能需要一段时间,但旧表仍然在此期间可用)
  5. d使用维护期,DROP {Old Table}并将{New Table}重命名为前一个{Old Table}。