zoukankan      html  css  js  c++  java
  • MySQL Error Log 文件丢失导致The server quit without updating PID file启动失败的场景

    今天在做mysql sniff测试的时候,中间重启MySQL实例的过程中,出现了"The server quit without updating PID file"这个经典的错误。
    因为把mysql sniff的日志文件放在了mysql实例的目录中,因此删除mysql sniff日志的时候无意中删除了mysql的errorlog文件。
    所以一开始怀疑这里出现的错误是mysql sniff进程在MySQL实例的datadir下写数据导致的,各种尝试重现都无法重现。
    最后仔细回忆了一下错误最开始的一些操作,好似乎跟mysql的errorlog有关,尝试后发现是删除MySQL的errorlog之后重启,也可以造成上述错误


    重现方式如下:
    1,对于正常运行的MySQL实例,直接删除MySQL配置的errorlog文件
    2,重启MySQL实例,发现:The server quit without updating PID FILE

    解决办法1:
    step 1,手动生成mysql errorlog文件,errorlog文件名称需要与配置文件中的配置名称保持不一致
    step 2,修改MySQL相关文件的权限,chown -R mysql:mysql

    解决办法2:
    1,简单粗暴,直接修改MySQL配置文件中的用户,以root用户启动
    2,待MySQL实例启动后,因为部分文件属主是root,比如每次重启都会重新生成的ibtmp1文件,修改MySQL相关文件的权限,chown -R mysql:mysql
    3,修改配置文件中的user为mysql,重启实例


    最后,为什么删除mysql的errorlog可以导致mysql重启的时候出现"The server quit without updating PID file"?
    查阅了很多资料,了解了一下MySQL的启动过程,个人推测大概如下
    1,mysql实例启动的过程中需要往errorlog中写入启动信息,如果errorlog不存在,则启动失败
    2,以root用户启动的时候,root用户的权限更高,应该可以创建errorlog
    3,不管怎么解决这个错误,最后一定要修改MySQL basedir的属主。

    参考:

    https://www.cnblogs.com/ivictor/p/6846017.html
    https://blog.csdn.net/wzl505/article/details/53322845
    https://codar.club/blogs/5c2d75cca8b3b.html(太奇葩了,应该是翻译软件翻译上面第一个的链接的内容的,看到这句话震惊了:Many children's shoes encountered this mistake when they started mysql.)

    另:

    MySQL 5.7版本下,mysql sniff死活抓不到当前实例请求的包数据,经过各种重启,各种折腾还是不行,最后发现mysql sniff已经对5.7不支持了
    开源是把双刃剑,别人的东西,没问的时候,用起来爽歪歪,有了问题,又没有源码修改能力,就只能干瞪眼了。
    https://github.com/Qihoo360/mysql-sniffer/issues/32

  • 相关阅读:
    ajax _02【XML响应,post请求】
    ajax_01【httpRequest.responseText】
    方法的定义【js函数】
    Promise基本用法
    promise
    筛选(1)
    ng-cli 中HTTP请求思路(1) (接口请求处理)
    PHP占用CPU过高几种思路
    关于tcpdump的那点事~
    虚拟机固定IP那点事
  • 原文地址:https://www.cnblogs.com/wy123/p/11772914.html
Copyright © 2011-2022 走看看