天天看点

CentOS安装mysql The server quit without updating PID file问题

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、修改初始密码

CentOS安装mysql The server quit without updating PID file问题

14、创建远程连接账号

CentOS安装mysql The server quit without updating PID file问题

以上是一个做运维的朋友给我的他们给客户安装的步骤

问题来了

以上的步骤是根据我系统的实际路径修改的,原文档是安装在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用户后面扒拉下官方文档继续更新

继续阅读