有没有办法在不进行重大更改的情况下重命名 InnoDB 表上的列?
table 很大,我想避免大的停机时间。
最佳答案
不幸的是,重命名列(使用 ALTER TABLE ... CHANGE COLUMN
)需要 MySQL 运行完整的表副本。
查看 pt-online-schema-change .这有助于您对表进行多种类型的 ALTER 更改,而无需在 ALTER 期间锁定整个表。在将数据复制到新表中时,您可以继续读取和写入原始表。通过触发器捕获更改并将其应用于新表。
例子:
pt-online-schema-change h=localhost,D=databasename,t=tablename \
--alter 'CHANGE COLUMN oldname newname NUMERIC(9,2) NOT NULL'
更新:MySQL 5.6 可以在不重建表的情况下执行某些类型的 ALTER 操作,更改列名是支持在线更改的操作之一。参见 http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html了解哪些类型的改变支持或不支持这一点。
关于mysql - 在不重新创建 MySQL 表的情况下更改列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8172540/