老夫前几天才在虚拟机的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