解决CentOs7下MySQL服务启动失败的问题

时间:2024-03-04 14:30:35

老夫前几天才在虚拟机的CentOS安装好MySQL, 过了个节, 居然都是一成灰了, 起不起来了.

[root@localhost ~]# service mysqld start

Starting mysqld (via systemctl): Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details. [FAILED]

按照上面的说法, 是让我们运行systemctl status mysqld.service journalctl -xe 着两个命令去查看错误的详细.

但是我运行了一下, 发现并没有什么帮助.所以我查看了一下MySQL的启动日志less /var/log/mysqld.log 发现了这个东东.

[ERROR] Can\'t start server: can\'t check PID filepath: No such file or directory

那么,现在问题就比较明确了, 就是MySQL的PID文件路径.(PID就是Linux里面的进程ID)

这个路径是在MySQL的配置文件/etc/my.cnf里面配置的, 理论上安装好MySQL的时候就有,如果没有就加上.

在[mysqld] 下面加上这一句 pid-file=/var/run/mysqld/mysqld.pid

现在只需要创建这个文件路径就OK啦.

# 创建PID目录
[root@#localhost ~]# mkdir -p  /var/run/mysqld/
# 查看一下创建目录的用户组,因为MySQL启动是用mysql这个用户运行的,我们之前用的是root用户创建的文件夹,那么mysql用户是没有权限的,所以我们需要给mysql用户授权
[root@#localhost ~]# ls -ld /var/run/mysqld/
drwxr-xr-x. 2 root root 60 1月   6 02:18 /var/run/mysqld/
# 授权
[root@#localhost ~]# chown mysql.mysql /var/run/mysqld/
# 启动MySQL
[root@#localhost ~]# service mysqld start
Starting mysqld (via systemctl):                           [  确定  ]
# 到此, 启动成功了

以此记录老夫在使用MySQL的时候遇到的问题~


更新: 2021-01-07 10:06:41

第二天, 老夫启动虚拟机, mysql服务又又又TM起不起来了, 依然是老问题, 但是每次都去配置一下, 也不是个事.虽然可以写个脚本解决, 但是感觉还是不方便.遂~ 我把pid文件的位置换了个地方.

这里需要说明一下, 默认mysqld.pid的路径是/var/run/mysqld/mysqld.pid 这个路径是放在内存中的, 所以每次关机了就会删除.

我把这个文件换到了这个路径下面/var/lib/mysql/mysqld.pid,需要做的修改如下:

1. 修改配置文件

修改/etc/my.cnf里面的pid-file值为这样:

pid-file=/var/lib/mysql/mysqld.pid

2. 修改启动文件

修改/etc/init.d/mysqld文件里面的pid-file为这样:(使用vim命令, 然后找到这一行修改)

get_mysql_option pid-file "/var/lib/mysql/mysqld.pid" mysqld mysqld_safe

3. 重新加载启动文件

systemctl daemon-reload

4. 重启MySQL

service mysqld start

5. 将MySQL加入开机启动

如果你的mysql没有开启启动,可以使用这个命令加入:

chkconfig mysqld on

另外, mysql服务启动后, 我们一般是在另外的电脑用工具连接mysql服务, 我使用的是DataGrip, 如果要让外面的电脑能够连接上mysql,首先需要的是将mysql的root用户的host修改为%. 这个登录mysql了就可以修改. 第二个就是要开放服务器的3306端口, 因为mysql默认端口是3306,如果你电脑的mysql重新设置了端口, 就要开放对应的端口. 因为我是本地虚拟机用来测试用的, 所以我就不做一个端口的开放, 直接关闭防火墙.不推荐这个方式在生产服务器使用.

关闭防火墙命令:(centos7可以使用)

//临时关闭
systemctl stop firewalld
//禁止开机启动
systemctl disable firewalld