CentOS安装mysql The server quit without updating PID file问题
-
- 背景描述
- 部署步骤
- 问题来了
- 网上解决办法汇总
- 最终解决办法
背景描述
最近接到个任务在CentOS部署一套5.7的mysql服务,之前没有在linux上安装过myslq的经验,但是往上看了一些文章感觉还是比较容易,同事也说只要几分钟就能搞定,于是欣然开始了我地采坑之路。。。
部署步骤
1、下载tar包,使用sftp工具上传至/tmp下
2、新建mysql用户、mysql用户组
#新建mysql用户组:groupadd mysql
#新建mysql用户:useradd mysql -g mysql
3、将mysql安装到/home/mysql/下
#解压:
cd /opt/mysql/
tar -xvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
#重命名
cd /opt/mysql
mv mysql-5.7.24-linux-glibc2.12-x86_64 mysql
4、新建data目录、日志目录
cd /opt/mysql
mkdir /opt/mysql/data
mkdir /opt/mysql/log
5、将/opt/mysql的所有者及所属组改为mysql
chown -R mysql:mysql /opt/mysql
6、初始化
su - mysql
cd /opt/mysql
./bin/mysqld --initialize --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data
⚠️初始化后会生成一串临时密码,作为首次登陆密码
如:2017-11-29T01:55:23.192210Z 1 [Note] A temporary password is generated for [email protected]: Q5Sck93kdK/*
7、配置my.cnf
接下来进入/opt/mysql/support-files/目录下
查看是否存在my-default.cnf文件,如果存在直接copy到/etc/my.cnf
cd /opt/mysql/support-files/
cp -a ./support-files/my-default.cnf /etc/my.cnf
如果不存在my-default.cnf文件,则在/etc/目录下创建my.cnf,并写入以下内容,例如:
vi /etc/my.cnf
[mysqld]
character_set_server=utf8
init_connect=‘SET NAMES utf8’
basedir=/home/mysql/mysql
datadir=/home/mysql/mysql/data
socket=/home/mysql/mysql/mysql.sock
log-error=/home/mysql/mysql/log/mysqld.log
pid-file=/home/mysql/mysql/mysql.pid
8、把mysqld放到本地系统服务中
接下来进入/opt/mysql/support-files/目录下
cd /opt/mysql/support-files/
cp -a ./support-files/mysql.server /etc/init.d/mysqld
#chmod 755 /etc/init.d/mysqld
9、启动mysql
/etc/init.d/mysqld start
如报错:ERROR! The server quit without updating PID file (/software/mysql/mysqld.pid).
因为新版本的mysql安全启动安装包只认/usr/local/mysql这个路径。
解决办法:
方法1、建立软连接
例:
#cd /usr/local/mysql
#ln -s /opt/mysql/bin/mysqld mysqld
如报错:Can’t connect to local MySQL server through socket ‘/opt/mysql/mysql.sock’
软链接:
ln -s /tmp/mysql.sock /opt/mysql/mysql.sock
10、登陆mysql
mysql -u root -p
会提示输入登陆密码,输入初始化时候的临时密码就可以了
11、加入环境变量,编辑 /etc/profile,这样可以在任何地方用mysql命令了
vi /etc/profile
在末尾添加如下行
export PATH=$PATH:/opt/mysql/bin
保存后执行 source /etc/profile 使生效
12、使用mysql
service mysqld start/stop/restart
13、修改初始密码
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9cmT4FkeN5WNXp1bOdVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5QjNwEDO1QTMxIDNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
14、创建远程连接账号
以上是一个做运维的朋友给我的他们给客户安装的步骤
问题来了
以上的步骤是根据我系统的实际路径修改的,原文档是安装在home目录下。以开始系统只有一个root用户,考虑到再去创建一个mysql用户比较麻烦(xxx的项目,需要和领导以及网管说明。。。)所以就没有去创建mysql用户,即部署步骤中的第二步未执行,在初始化的时候–user参数也不填。在执行初始化之后发现The server quit without updating PID file…的问题,检查mysql.pid文件的确不存在,手动创建一个并赋予读写权限(root本身就能对这些文件读写,其实没必要)也无法解决,想着是不能对mysql.pid文件读写导致这个问题,于是手动写一个pid到这个文档中,启动成功了,但是ps -ef|grep mysql没发现mysl的进程,很明显问题没解决。
想到log文件是否会有错误信息呢,于是检查log/mysqld.log文件,发现日志只输出到随机生成root密码处,后面就没有了。考虑是否是配置文件出错,首先检查核对basedir、datadir、error-log路径都没有问题,而且前期log也能正常输出,data目录下也有初始化出来的文件,所以my.cnf配置应该没问题。
网上解决办法汇总
自己没法解决只能放大招了——度娘。相信搜过这个问题的人都看到了一下八个解决办法
1.可能是data/mysql 文件夹没有写的权限
解决方法 :给予权限,执行 “chown -R mysql:mysql /home/data/mysql” “chmod -R 755 /home/data/mysql” 然后重新启动mysqld!
2.可能进程里已经存在mysql进程
解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld!
3.可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。
解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。
4.mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。
解决方法:请在[mysqld]下设置这一行:datadir = /home/data/mysql
5.skip-federated字段问题
解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。
6.错误日志目录不存在
解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限
7.selinux惹的祸,如果是centos或redhat系统,默认会开启selinux
解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。
8.删除mysql库文件/data/mysql/中的“ib_*”文件,然后重启mysql
PS:这一条要小心使用,千万记得文件备份,否则万劫不复
如果以上八条没有帮助到你,那就接着往下看吧
我安装的是5.7.24的,朋友说他近期安装了5.7.23是正常的,所以有想会不会是小版本之间有差异导致的,于是又改成5.7.23的版本,很遗憾没有解决问题
最终解决办法
软件问题、配置问题都排除了黔驴技穷了。。。。想着按照步骤完完整整一步一步地再撸一遍,奇迹般没问题了,问题就出在缺少的mysql用户上,我的天。。。。至于为什么一定需要一个mysql用户后面扒拉下官方文档继续更新