




错误“Table is full”本质是MySQL磁盘或表空间耗尽,需检查tmpdir和datadir所在分区空间,调整tmpdir路径、清理无用表、加索引优化查询,并在PHP中主动捕获mysqli_error。
ERROR 1114 (HY000): The table is full 怎么办这不是 PHP 的问题,而是 MySQL 的存储引擎(通常是 MyISAM 或 InnoDB)在写入临时表、排序缓冲区或磁盘临时表时,碰到了磁盘空间不足、tmpdir 满、或 InnoDB 表空间(ibdata1 或独立表空间文件)耗尽的情况。PHP 只是触发了这个错误,真正要查的是 MySQL 侧的资源瓶颈。
SHOW VARIABLES LIKE 'tmpdir' 返回路径已满怎么处理MySQL 在执行 GROUP BY、ORDER BY、大结果集 UNION 等操作时,会把中间结果写到 tmpdir 指向的目录。如果该目录所在分区只剩几十 MB,就极易触发 “The table is full”。
df -h 查看 tmpdir 所在分区实际剩余空间/etc/my.cnf)中添加 tmpdir = /path/to/larger/partition/tmp,然后重启 mysqld
SET GLOB
AL tmpdir = '/new/path';(注意:仅对新连接生效,且要求 MySQL 用户对该路径有读写权限)ORDER BY 字段加索引;控制 SELECT 返回字段数量;用 LIMIT 分页代替全量拉取CREATE DATABASE 或建表失败,报错含 ibdata1 或 .ibd 相关提示说明 InnoDB 共享表空间(ibdata1)或独立表空间文件(*.ibd)所在磁盘已满,或者配置的 innodb_data_file_path 已无法自动扩展。
datadir 路径磁盘使用率:SHOW VARIABLES LIKE 'datadir';,再 df -h 定位innodb_file_per_table=ON(推荐开启):若关闭,所有表数据都挤在 ibdata1,它无法收缩,只能扩容或重建实例.ibd 文件所在分区满了,清理无用表(DROP TABLE)后记得 OPTIMIZE TABLE 回收空间(对 InnoDB 有效)ibdata1 或 .ibd 文件——MySQL 会直接崩溃mysqli_query() 创建数据库返回 false,但没具体错误信息默认情况下,mysqli_query() 不抛异常,也不自动打印 MySQL 原始错误。你看到的 “table full” 很可能被静默吞掉了。
if (!$result) { echo mysqli_error($link); }
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);,后续查询失败会直接 throw 异常The table is full 时,99% 是磁盘/表空间问题,不是 SQL 写错了真正卡住人的地方,往往不是不会写 SQL,而是看到 “table is full” 就去查 PHP 配置或重写逻辑。先盯死 df -h 和 SHOW VARIABLES,比翻 PHP 手册快十倍。