我在 Ubuntu 19 上运行 MySQL 8。我有一个 543G 的表,我必须添加一个新列和索引。我从新专栏开始:
alter table hugeTable add column newCol tinyint(1) after existingColumn;
运行几个小时后,我收到一个错误,大致如下:
... table 'hugeTable' is full
我环顾四周,没有发现任何不好的地方——我还剩下大约 294G 的磁盘空间。查看错误日志,很明显发生了什么——它正在生成一个不断增长的#sql 文件。我再次启动它以了解它的增长速度,并且在短短一个小时内就超过了 35G:
-rw-r----- 1 mysql mysql 35G Nov 19 21:53 '#sql-ib1124-819861495.ibd'
并迅速成长。
所以真正的问题是,有没有办法解决这个问题?我有这个表的备份,所以可以冒险关闭它并运行更新而不使用撤消、#sql 等文件。或者,我是否必须使用 sed 来修改备份文件并使用它?
利用新的、更好的 ALTER 方法:
如果这些不能用请求的算法完成,他们会在不执行 ALTER 的情况下给你一个错误。从那里,你可以决定做什么。
“标志”上的单列索引很少有用。也许您不需要新索引?