8

我想在我的桌子上运行它:

ALTER TABLE table_name MODIFY col_name VARCHAR(255)

但我的表很大,它有超过 65M(6500 万)行。现在当我执行时,执行这个命令需要将近 50 分钟。有什么更好的方法来改变表?

4

3 回答 3

4

嗯,你需要

 ALTER TABLE table_name CHANGE col_name new_name VARCHAR(255)

但是,你是对的,做出改变需要一段时间。确实没有更快的方法来更改 MySQL 中的表。

您担心变更期间的停机时间吗?如果是这样,这是一种可能的方法:将表复制到新表,然后更改副本上的列名,然后重命名副本。

您可能已经发现,在生产系统中定期更改表中的列名并不是一个好主意。

于 2012-06-12T11:41:18.333 回答
4

使用 percona 工具包的另一个变体 https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html

于 2015-11-26T15:18:56.163 回答
0

您可以使用 Oak 处理架构更改而无需停机。

Oak-online-alter-table复制原始表的模式,应用您的更改,然后复制数据。由于 Oak 在原始表上放置了一些触发器,因此仍然可以调用 CRUD 操作,因此在操作期间不会丢失任何数据。

请参考其他问题,其中橡木的作者详细解释了这种机制并建议了其他工具。

于 2013-12-10T10:35:50.923 回答