直接原因是mysqld进程无法在pid-file指定路径创建或写入文件,需同步排查权限(目录属主、x/w权限、SELinux)、路径(父目录是否存在)和磁盘(空间及inode是否耗尽)。

MySQL启动报“Can't create/write to file ... pid-file”错误
直接原因是mysqld进程在指定路径下无法创建或写入mysql.pid文件。这不是配置语法错误,而是运行时系统级障碍,必须从权限、路径、磁盘三方面同步排查——日志里出现Errcode: 2(No such file or directory)或Errcode: 13(Permission denied)就对应这两类问题。
检查pid-file父目录是否存在且可写
MySQL不会自动创建pid-file的上级目录,比如配置了pid-file = /var/run/mysqld/mysqld.pid,但/var/run/mysqld/根本不存在,就会报Errcode: 2。
- 先确认配置中
pid-file路径:grep "pid-file" /etc/my.cnf或mysqld --print-defaults | grep pid-file - 检查该路径的父目录是否存在:
ls -ld $(dirname /var/run/mysqld/mysqld.pid) - 若返回
No such file or directory,手动创建并授权:sudo mkdir -p /var/run/mysqld,然后sudo chown mysql:mysql /var/run/mysqld - 注意:不要用
chmod 777,mysqld在严格模式下会拒绝写入世界可写的目录
验证mysql用户对数据目录和PID目录是否有完整权限
权限问题常被误判为“改了chown就完事”,但实际要同时满足:目录属主是mysql、目录有x(执行)权限(否则无法进入)、文件有w(写)权限。SELinux启用时还会拦截,setenforce 0可临时验证是否为其所致。
- 检查
datadir和pid-file所在目录的权限:ls -ld /var/lib/mysql /var/run/mysqld - 正确权限应类似:
drwxr-x--- 5 mysql mysql(注意中间的r-x,不是---) - 若
datadir权限异常,修复命令为:sudo chown -R mysql:mysql /var/lib/mysql+sudo chmod 750 /var/lib/mysql - 残留的
mysql.pid文件即使属主正确,也会阻止新进程写入,务必先清理:sudo rm -f /var/run/mysqld/mysqld.pid
确认磁盘空间与inode未耗尽
磁盘满不只影响日志,也直接导致pid-file创建失败。尤其在宝塔等环境,/www/wwwlogs/和/www/server/data/是重灾区;df -h看使用率≥95%就要处理,但更要跑df -i看inode是否耗尽——小文件打满也会卡住mysqld。
- 快速定位大目录:
du -sh /www/* | sort -hr | head -5 - 清日志优先:
sudo find /www/wwwlogs -name "*.log" -mtime +30 -delete - 别删
/www/server/data/ib_logfile*,那是InnoDB重做日志,删了会导致启动崩溃 - 如果
df -i显示Use%接近100%,用find /www -xdev -type f | cut -d/ -f2 | sort | uniq -c | sort -n查哪个子目录生成了海量小文件
真正棘手的是权限与SELinux/磁盘空间的组合问题:比如chown看似生效,但SELinux上下文没更新,ls -Z能看到unconfined_u:object_r:default_t:s0这类非预期标签;又或者df -h显示还有5%空间,但df -i已100%,这种细节不逐项验证,光重启服务只会反复失败。











