我最近被推到了服务器的数据库管理员的位置,所以我不得不学习。我们最近发现我们的一个表已经最大化了id列,需要迁移到bigint。 这是针对INNODB表,大约有大约301GB的数据。我们正在运行mysql版本5.5.38。我正在运行的用于迁移表的命令是
ALTER TABLE tb_name CHANGE id id BIGINT NOT NULL;
我启动了迁移,现在我们已经进入了迁移18个小时,但是我没有看到服务器上的磁盘空间发生变化,这让我觉得没有任何事情发生。我们有足够的内存,所以没关注,但是当我运行“show processlist;”时它仍然显示以下消息状态
复制到tmp表
有没有人有任何想法或知道我做错了什么?请询问您是否需要更多信息。
答案 0 :(得分:0)
是的,这需要花费很多时间。磁盘可能会尽可能快地旋转。 (SSD使用更快的仓鼠。)
你可以杀死ALTER,因为它正在做的就是“复制到tmp表”,之后它会将tmp表重命名为真实表并删除旧副本。
我希望您在innodb_file_per_table = ON
开始时ALTER
。否则它将扩展ibdata1
,之后不会缩小。
pt-online-schema-change
是另一种选择。它仍然需要一个loooooong时间(一个额外的'o'因为它会稍微慢一点)。它将在不阻止其他活动的情况下完成工作。
这可能是检查表中所有列和索引的好时机:
如果您需要进一步的指导,请提供SHOW CREATE TABLE
。