如何解决MySQL错误errno:135‘记录文件无剩余空间’问题
解决MySQL创建表时的errno:135 "No more room in record file"错误
你碰到的这个errno 135错误,虽然提示指向目录权限,但实际原因可能涉及磁盘空间、权限配置或MySQL表空间限制,我帮你梳理几个实用的排查和解决步骤:
1. 先检查数据库目录的磁盘剩余空间
这是触发该错误最常见的原因之一——哪怕小表能创建成功,但添加更多列时需要写入更多元数据或临时文件,磁盘空间不足就会直接报错:
- Linux/macOS:在终端执行
df -h,找到MySQL数据目录(通常是/var/lib/mysql)对应的磁盘分区,查看剩余空间。 - Windows:打开文件资源管理器,定位到MySQL数据存放文件夹(比如
C:\ProgramData\MySQL\MySQL Server X.X\Data),右键查看磁盘属性里的可用空间。
如果空间不足,清理磁盘上的无用文件(如旧日志、临时文件)或扩容磁盘后,再尝试执行建表/ALTER操作。
2. 验证数据库目录的权限设置
错误提示明确提到要检查数据库目录的权限,所以要确保MySQL进程对目标数据库目录有完整的读写权限:
- Linux/macOS:
- 查看目标数据库目录的权限详情:
ls -ld /var/lib/mysql/[你的数据库名] - 如果目录所有者不是
mysql用户,执行:sudo chown -R mysql:mysql /var/lib/mysql/[你的数据库名] - 修正目录权限为MySQL进程可访问:
sudo chmod -R 750 /var/lib/mysql/[你的数据库名]
- 查看目标数据库目录的权限详情:
- Windows:
找到数据库文件夹,右键选择「属性」→「安全」,确保运行MySQL服务的用户(通常是NETWORK SERVICE或Local System)拥有「读取」「写入」权限。
3. 检查系统临时目录的可用空间
MySQL创建表或执行ALTER操作时,会依赖系统临时目录(比如Linux的/tmp、Windows的C:\Windows\Temp)存放临时文件,如果临时目录所在磁盘满了,也会触发这个错误:
- 按照第一步的方法检查临时目录所在磁盘的剩余空间,清理过期临时文件释放空间。
- 若需要,可修改MySQL的
tmpdir配置项,指定一个空间更充足的目录作为临时目录,修改后重启MySQL服务。
4. 排查InnoDB表空间配置(若使用InnoDB引擎)
你的表包含外键,默认会使用InnoDB引擎。如果InnoDB的共享表空间(比如ibdata1)设置了固定大小且已占满,也会出现该错误:
- 打开MySQL配置文件(
my.cnf/my.ini),查找innodb_data_file_path参数,如果是类似ibdata1:10M;ibdata2:10M的固定大小配置,会限制表空间扩展。 - 修改为支持自动扩展的配置,例如:
innodb_data_file_path = ibdata1:10M:autoextend - 重启MySQL服务(注意:修改表空间配置前,请务必备份数据,避免意外)
最后重试操作
完成上述排查修复后,重新执行你的建表语句:
create table measurement( user_id int(7), age int(3), gender varchar(8), height int(5), weight int(5), bmi int(5), body_fat int(5), lean_mass int(5), measurement_date date, PRIMARY key (user_id), FOREIGN key(user_id) REFERENCES user_info(user_id) );
或者尝试ALTER TABLE添加列,应该就能成功执行了。
内容的提问来源于stack exchange,提问作者Jushraf Rahi




