• 启动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 报错信息

  • 相关阅读:
    点云对齐/轨迹对齐方法及论文讲解
    【Leetcode】剑指Offer 27:二叉树的镜像
    漏洞深度分析|Apache MINA SSHD反序列化漏洞
    【2021集创赛】Diligent杯一等奖:基于Cortex-M3软核的智能识别称量平台
    数据库索引:综合详细指南
    nodejs的安装和全局配置(超详细哦)
    大模型赛道如何实现华丽的弯道超车
    遇见问题:使用mybaties向数据库中插入数据,idea显示插入成功,但是数据库中并没有数据变化?
    剑指Offer04. 二维数组中的查找【中等】
    基于SpringBoot的图书进销存管理系统
  • 原文地址:https://blog.csdn.net/m0_67403188/article/details/126565383