mysql 5.7 启动报“the server quit without updating pid file”或“can’t create/write to file”错误,90%源于pid-file父目录不存在或mysql用户无写权限;需查真实pid-file路径,创建并授权父目录(如/var/run/mysqld),检查/run分区空间与inodes是否耗尽,并排查残留进程及错误日志。

MySQL 5.7 启动失败且报 “The server quit without updating PID file” 或 “Can’t create/write to file … No such file or directory”,90% 是因为 pid-file 配置路径的父目录不存在,或存在但 mysql 用户无写权限——不是 PID 文件本身丢了,而是根本写不进去。
确认 pid-file 实际配置路径
别猜,先查真实配置。运行:
mysqld --print-defaults | grep pid-file
或打开配置文件(常见位置:/etc/my.cnf、/etc/mysql/my.cnf、/usr/local/mysql/etc/my.cnf),在 [mysqld] 段里找:
pid-file = /var/run/mysqld/mysqld.pid
拿到这个路径后,重点检查它的**父目录**(比如上面例子是 /var/run/mysqld),而不是 .pid 文件本身。
创建父目录并正确授权给 mysql 用户
/var/run 是 tmpfs,重启即清空,所以不能只手动 mkdir 一次就完事。必须同时满足三项:
- 父目录存在:
sudo mkdir -p /var/run/mysqld - 属主是
mysql:sudo chown mysql:mysql /var/run/mysqld - 权限为
755(777不安全):sudo chmod 755 /var/run/mysqld
如果用的是宝塔或自定义路径(如 /www/server/data/),同样检查该路径的父目录是否归属 mysql,例如:sudo chown -R mysql:mysql /www/server/data。
排查 /run 分区空间与 inode 耗尽
即使目录和权限都对,mysqld 仍可能静默失败。因为 /run 默认只有几十 MB,且是内存挂载,满后不报 “No space”,只报 “No such file or directory”。
执行这两条命令验证:
df -h /run
df -i /run
若任一接近 100%,需清理残留或临时扩容:
- 删旧文件:
sudo rm -f /run/mysqld/*.pid /run/mysqld/*.sock - 临时扩容(仅调试):
sudo mount -o remount,size=256M /run
注意:不要用 rm -rf /var/lib/mysql 或 /www/server/data,那是数据目录,删了等于删库。
检查残留进程与错误日志
启动失败常因“假死”残留。先确认没真进程在跑:
ps aux | grep mysqld | grep -v grep
再看 pid-file 是否还留着但对应进程已死:
sudo cat /var/run/mysqld/mysqld.pid 2>/dev/null | xargs -r kill -0 2>/dev/null || echo "PID file stale"
最后,一定翻错误日志——宝塔默认在 /www/server/data/localhost.err,RPM 安装多在 /var/log/mysqld.log。日志里若出现 Table 'mysql.user' doesn't exist 或 ibdata1 锁定失败,说明问题已超出 PID 范畴,得另走初始化或 innodb_force_recovery 流程。
真正卡住人的地方,往往不是找不到 .pid 文件,而是以为改了配置、touch 了空文件、chown 了目录就万事大吉——却忽略了 /run 的 tmpfs 特性、inode 耗尽的隐蔽性,以及错误日志里混在几百行中的那一句关键提示。











