---
title: 解决CentOs7下MySQL服务启动失败的问题
date: 2021-01-06 15:21:31
tags: MySQL
---
老夫前几天才在虚拟机的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
```
一键复制
编辑
Web IDE
原始数据
按行查看
历史