我在Ubuntu 19上运行MySQL 8,我有一个543 g的表,我必须添加一个新的列和索引。我从新的专栏开始:
alter table hugeTable add column newCol tinyint(1) after existingColumn;在运行了几个小时之后,我收到了一个错误,大致是:
... table 'hugeTable' is full我环顾四周,没有发现任何不好的地方--我还剩下大约294克的磁盘空间。查看错误日志,就会发现发生了什么--它正在生成一个不断增长的#sql文件。我又一次启动了它,以了解它增长得有多快,一个小时后它就超过了35G:
-rw-r----- 1 mysql mysql 35G Nov 19 21:53 '#sql-ib1124-819861495.ibd'而且长得很快。
所以真正的问题是,有办法解决这个问题吗?我有这个表的备份,所以有可能关闭它并在没有撤销、#sql等文件的情况下运行更新。或者,我必须使用sed来修改备份文件并使用它吗?
发布于 2019-11-20 20:05:08
利用新的、更好的方法来改变:
SET SESSION alter_algorithm='INSTANT' ;
ALTER TABLE foo ADD COLUMN ... ; -- without the AFTER
SET SESSION alter_algorithm='NOCOPY' ;
ALTER TABLE foo ADD INDEX name(col1, col2);如果请求的算法无法完成这些操作,它们将在不执行ALTER的情况下给出一个错误。从那里,你可以决定该做什么。
“标志”上的单列索引很少有用。也许你不需要新的索引?
https://dba.stackexchange.com/questions/253684
复制相似问题