启动mysql服务时一直提示ERROR The server quit without updating PID file

centos7中使用二进制文件部署的mysql

启动mysql 服务时一直提示

ERROR! The server quit without updating PID file (/usr/local/mysql/data/localhost.pid)

不管是执行 systemctl start mysqld

还是执行support-file目录下的mysql.service start

按照网上能找到的方法(参考 mysql提示The server quit without updating PID file /usr/local/mysql/data/localhost.localdomain.pid_zhou75771217的博客-CSDN博客 )都尝试过还是报错

最后发现在/var/lib/目录下有个mysql 目录 里面竟然有个localhost.pid 文件

 

于是将my.cnf配置文件中的datadir 及 log-error 文件, pid-file 文件都指向该目录

 

 

保存后重新执行/usr/local/mysql/support-files/mysql.server start

竟然奇迹般的成功了

 

那么为什么会出现这种情况呢 datadir , log-error ,pid-file 的路径为什么是/var/lib/mysql

而不是执行初始化时指定的 /usr/local/mysql/data 目录

 

出现该问题的原因,很有可能是由于在部署二进制mysql前, 使用yum 或 rpm 安装过mysql包 (出现问题这台虚拟机就是这种情况)

重新新建了一台虚拟机,重新部署就没有出现过该问题

(事情并没有这么简单,新装的虚拟机启动mysql服务时依旧提示pid-file错误)

 

经过近1天的研究终于找到了问题所在!!!

注意:support-files目录下的mysql.server 执行的是 mysqld_safe 而不是 mysqld

使用vim查看mysql.server的内容

找到第281行 可以看出,执行参数start时,运行的是$bindir目录下的/mysqld_safe 程序

 

 

由于我是所有操作都是用root 用户执行的, (这是个坑)

而用root用户执行mysqld 跟mysqld_safe 不加--user=root参数 指定用户时会报错的

 

为了让mysqld_safe能过执行,需要对mysql.service文件进行一点点修改

还是在281行, 在执行mysqld_safe 时 我加入了 --user=root 参数

 

此时再执行 mysql.server start 终于看到了久违的SUCCESS!

 

再看下面的内容

 

此时localhost.pid 文件中保存的就是mysqld的pid

再查看 ps进程

 

可以看到存在2个进程mysqld_safe 与 mysqld

 

归根结底:出现该错误的原因就是由于我在root用户下部署导致的!!!

如果不想修改mysql.server 文件的话建议还用新建mysql 用户运行

顺便说一句:修改完mysql.server 文件后, 成功运行mysql 服务用的都是系统自带的默认参数, 因为我压根就没创建 my.cnf 文件!

启动报错跟my.cnf 文件中的配置信息也无关!

 

 

注意:pid-file文件是在系统中有mysql服务在运行时才会生成,mysql服务没有运行的情况下找不到PID文件也是正常的!!!

补充说明:

那么为什么会一直提示 ERROR! The server quit without updating PID file (/usr/local/mysql/data/localhost.pid) 这个错误的

通过分析mysql.server 文件

下面是部分shell代码

再看wait_for_pid函数代码

通过注释可以看出:wait_for_pid 需要3个参数

第一个参数verb 可选值为 create | removed 创建或删除 pid-file

第二个参数pid 为mysqld 运行时的PID

第三个参数pid_file_path 为 pid-file 文件的路径

注意看184 行到199行的代码

通过注释可以看出,如果mysqld 服务没有运行的话, pid-file 文件 将不会被更新

196行调用了log_failure_msg 输出了我们熟悉的错误信息 The server quit without updating PID file (/usr/local/mysql/data/localhost.pid)

由于没有运行mysqld服务, 没有对应的PID值, 也就无法创建对应的pid文件,

因此就出现了那句 我们熟悉的 The server quit without updating PID file (/usr/local/mysql/data/localhost.pid) 错误信息

这就是为什么每次都出现那句PID file 报错信息

  • 126
    点赞
  • 257
    收藏
    觉得还不错? 一键收藏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值