You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

磁盘空间充足但MySQL报1114表已满错误的排查求助

问题原因分析与解决办法

核心原因

别被虚拟机(Guest系统)里的根分区剩余空间给迷惑了!这个报错的关键问题出在VirtualBox主机的剩余磁盘空间不足上,而非你虚拟机内的MySQL配置或分区空间:

  • InnoDB执行ALTER TABLE(尤其是添加自增主键、新字段这类操作)时,会创建与原表规模相当的临时表来存储中间数据。虽然你虚拟机里的根分区还有11G剩余,但你的虚拟机磁盘大概率是动态分配格式(比如VDI)——虚拟机的磁盘文件实际存储在主机上,当虚拟机需要扩容磁盘空间来容纳临时表时,主机仅剩的3G空间根本无法支撑,最终导致InnoDB无法完成临时表创建,触发1114 The table 'article' is full错误。
  • 补充:哪怕你用了InnoDB独立表空间(article.ibd),ALTER操作的临时数据仍需要额外磁盘空间,主机空间不足直接掐断了这个可能性。

解决方法

按优先级给你几个可行方案:

  1. 紧急清理主机空间(最快见效)
    立刻清理主机上的冗余文件(比如旧虚拟机快照、闲置下载文件、过期日志等),至少腾出10G以上剩余空间(临时表所需空间基本和原表大小相当,你的原表是8.4G,留足余量更稳妥),清理完成后重新执行ALTER TABLE语句即可。

  2. 用在线DDL工具替代原生ALTER(适合主机空间无法大幅扩容的情况)
    如果你主机实在腾不出足够空间,可以使用Percona的pt-online-schema-change工具执行在线DDL操作。它不会创建全量临时表,而是分批将原表数据复制到新表中,占用临时空间小很多,还能避免锁表影响业务。执行示例如下:

    pt-online-schema-change --alter "ADD COLUMN intId INT AUTO_INCREMENT PRIMARY KEY, ADD COLUMN categoryIntId INT, ADD COLUMN sourceIntId INT" D=数据库名,t=article --execute
    

    注意操作前先在测试环境验证,且尽量选业务低峰期执行。

  3. 调整虚拟机磁盘配置(长期解决方案)

    • 若经常需要处理大表DDL,建议把虚拟机磁盘改成预分配空间格式,避免动态扩容时依赖主机剩余空间;
    • 直接扩大虚拟机磁盘容量,同时确保主机有足够剩余空间容纳扩容后的虚拟机磁盘文件。
  4. 额外排查:确认MySQL临时目录空间
    虽然核心问题是主机空间,但也可以顺带检查MySQL临时目录配置:执行SHOW VARIABLES LIKE 'tmpdir';,确认tmpdir指向的目录所在分区有足够空间(你的情况里根分区剩11G,这部分应该没问题)。

内容的提问来源于stack exchange,提问作者Nihau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:12:12