You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu系统下MySQL无法启动问题求助

解决MySQL重启失败(Job for mysql.service failed)的问题

我之前也碰到过一模一样的MySQL启动卡壳的情况,别着急,咱们一步步拆解问题来解决:

先明确你的问题场景

你执行重启命令:

root@S128046:~# service mysql restart

收到报错:

Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.

查看服务状态时,输出显示MySQL卡在了activating (start-post)状态:

● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: activating (start-post) (Result:...

第一步:先拿到完整的错误日志

你看到的systemctl status内容被截断了,咱们先看最关键的详细日志,执行这条命令:

journalctl -xe -u mysql.service

重点盯日志里的ERROR或者Failed开头的行,这会直接告诉你启动失败的核心原因——常见的坑无非是配置错了、权限不对、端口被占或者残留进程搞事情。

第二步:针对性排查常见问题

1. 先检查配置文件有没有语法错误

MySQL对配置文件的语法很挑剔,哪怕多打个逗号都能崩掉,执行这条命令做配置校验:

mysqld --validate-config

如果有错误,它会直接告诉你哪一行出问题了,改完再试重启。

2. 检查数据目录的权限

MySQL的数据目录(默认是/var/lib/mysql)必须属于mysql用户和用户组,不然进程读不到数据就会启动失败。先看权限:

ls -ld /var/lib/mysql

如果显示的所有者不是mysql:mysql,就执行下面的命令修复:

chown -R mysql:mysql /var/lib/mysql
chmod 750 /var/lib/mysql

3. 看看3306端口是不是被抢了

有时候别的进程(比如另一个MySQL实例、或者其他占用3306的程序)会把端口占了,导致新进程启动不了,查一下:

netstat -tulpn | grep 3306

如果查到有其他进程,要么杀掉那个进程,要么去MySQL配置文件里改个端口(找port参数改成比如3307)。

4. 清理残留的PID文件

如果MySQL之前意外崩溃,可能会留下一个PID文件,系统会误以为进程还在运行,导致启动卡住,删掉它:

rm -f /var/run/mysqld/mysqld.pid

第三步:强制重启试试

如果上面的步骤都试过了还是不行,咱们先彻底杀掉残留进程,再重新启动:

systemctl stop mysql.service
killall -9 mysqld
systemctl start mysql.service

一般到这一步就能解决大部分启动失败的问题了,如果还是不行,把journalctl里的具体错误信息贴出来,咱们再接着排查。

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

火山引擎 最新活动