MySQL启动报错The server quit without updating PID file

0    50    1

Tags:

👉 本文共约2124个字,系统预计阅读时间或需8分钟。

可能原因

  • 可能是/usr/local/mysql/data/mysql.pid文件没有写的权限 解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data” “chmod -R 755 /usr/local/mysql/data” 然后重新启动mysqld!
  • 可能进程里已经存在mysql进程 解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld!
  • 可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。 解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。
  • mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。 解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data
  • skip-federated字段问题 解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。
  • 错误日志目录不存在 解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限
  • selinux惹的祸,如果是centos系统,默认会开启selinux 解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试

一个示例

故障背景

有次测试环境主机登陆不上,之后发现是现场断电,导致虚拟机所在的物理机关机了。这样的话虚拟机上跑的一些进程没有手动停止就异常关闭了,可能会出现问题。等物理机开机登陆之后,看环境状态,果然mysql启动失败了,在此记录下此情况的解决方式。

直接启动mysql报如下错误

MySQL启动报错The server quit without updating PID file

经过一一核查上边列举的情况发现这些情况我都不符合。

在my.cnf中加innodb_force_recovery=x参数,值填写从1-6,直到库能起来为止

各参数意思如下,能填写小数值库能起来最好,否则有丢失数据的风险。

  • 1)(SRV_FORCE_IGNORE_CORRUPT): 忽略检查到的 corrupt 页。尽管检测到了损坏的 page 仍强制服务运行。一般设置为该值即可,然后 dump 出库表进行重建。
  • 2)(SRV_FORCE_NO_BACKGROUND): 阻止主线程的运行,如主线程需要执行 full purge 操作,会导致 crash。 阻止 master thread 和任何 purge thread 运行。若 crash 发生在 purge 环节则使用该值。
  • 3)(SRV_FORCE_NO_TRX_UNDO): 不执行事务回滚操作。
  • 4)(SRV_FORCE_NO_IBUF_MERGE): 不执行插入缓冲的合并操作。如果可能导致崩溃则不要做这些操作。不要进行统计操作。该值可能永久损坏数据文件。若使用了该值,则将来要删除和重建辅助索引。
  • 5)(SRV_FORCE_NO_UNDO_LOG_SCAN): 不查看重做日志,InnoDB 存储引擎会将未提交的事务视为已提交。此时 InnoDB 甚至把未完成的事务按照提交处理。该值可能永久性的损坏数据文件。
  • 6)(SRV_FORCE_NO_LOG_REDO): 不执行前滚的操作。恢复时不做 redo log roll-forward。使数据库页处于废止状态,继而可能引起 B 树或者其他数据库结构更多的损坏。

很惨的是我这里使用到6才将库启动成功。

图片

启动之后查看mysql日志,发现库可能已经损坏

图片

只能选择将库的数据全量导出,mv掉data目录之后再重新初始化

图片

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

因为log_detail表已经损坏,无法正常查看导出,只能跳过改存储日志的表,导出表结构,后续在重新创建此表。

Mv掉原存储数据的data目录,并且重新创建data目录:

图片

配置my.cnf 将my.cnf中innodb_force_recovery 这行配置删除或者配置为innodb_force_recovery=0,初始化mysql。

图片

图片

初始化之后,拉起mysql,修改密码

图片

重新导入之前备份的数据,并根据之前损坏表的表结构创建之前过滤掉的表

图片

图片

核查下导入数据是否正常,若无问题,只能用这样的办法解决异常停止导致的启动失败了,否则直接删掉ib_logfile0,ib_logfile1,可以将库拉起,但是库还是损坏状态。

参考

https://mp.weixin.qq.com/s/16UgVtYoWrU4G24JmSGBbA

https://cloud.tencent.com/developer/article/1409737

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

1 × 5 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部