转载请标明出处^_^
原文首发于:https://www.zhangruibin.com
本文出自于:RebornChang的博客

MySQL服务中断后重启失败及解决办法(个例)

Starting MySQL. ERROR! The server quit without updating PID file (/usr/local/mysql/mysql-5.6.44-linux-glibc2.12-x86_64/data/zhrb.localdomain.pid).

早上上班的时候习惯性刷下自己的博客看看出故障没,有没有新的留言,刷了之后发现出故障了,那么按照以往的经验是数据库死掉了,那直接重启数据库吧。
因为MySQL服务加入了service,所以直接service mysql start 启动吧,意外的是,启动失败了,启动结果:
Starting MySQL. ERROR! The server quit without updating PID file (/usr/local/mysql/mysql-5.6.44-linux-glibc2.12-x86_64/data/zhrb.localdomain.pid).

排查失败原因

根据提示,系统启动的时候找不到.pid结尾的文件,去文件夹下面ll的确没这个文件,但是为什么没这个文件,找到原因才能解决问题,所以还是看日志吧,博主的安装目录为/usr/local/mysql/mysql-5.6.44-linux-glibc2.12-x86_64/data/,错误日志指定在该目录下,查看zhrb.localdomain.err日志,截取相关日期的错误日志记录如下:

2019-08-11 20:29:06 11832 [Note] Plugin 'FEDERATED' is disabled.
2019-08-11 20:29:06 11832 [Note] InnoDB: Using atomics to ref count buffer pool pages
2019-08-11 20:29:06 11832 [Note] InnoDB: The InnoDB memory heap is disabled
2019-08-11 20:29:06 11832 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2019-08-11 20:29:06 11832 [Note] InnoDB: Memory barrier is not used
2019-08-11 20:29:06 11832 [Note] InnoDB: Compressed tables use zlib 1.2.11
2019-08-11 20:29:06 11832 [Note] InnoDB: Using Linux native AIO
2019-08-11 20:29:06 11832 [Note] InnoDB: Using CPU crc32 instructions
2019-08-11 20:29:06 11832 [Note] InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
2019-08-11 20:29:06 11832 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2019-08-11 20:29:06 11832 [ERROR] Plugin 'InnoDB' init function returned error.
2019-08-11 20:29:06 11832 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2019-08-11 20:29:06 11832 [ERROR] Unknown/unsupported storage engine: InnoDB
2019-08-11 20:29:06 11832 [ERROR] Aborting2019-08-11 20:29:06 11832 [Note] Binlog end
2019-08-11 20:29:06 11832 [Note] Shutting down plugin 'partition'
2019-08-11 20:29:06 11832 [Note] Shutting down plugin 'ARCHIVE'
2019-08-11 20:29:06 11832 [Note] Shutting down plugin 'BLACKHOLE'
2019-08-11 20:29:06 11832 [Note] Shutting down plugin 'INNODB_SYS_DATAFILES'

通过上面的日志我们可以看到一句重要的话:InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12

这句话说的是InnoDB数据库引擎的初始工作区缓存大小为128M,系统可分配的mmap内存大小为137363456 bytes,换算成M是131M。
理论上来看,131M>128M,不应该存在分配内存失败啊,但是就是失败了,那是不是跟系统的内存分配机制有关?
顺便提一句,博主买的低端主机配置为:2Core,1G RAM,满服务下内存使用率如下图所示:

分析原因可能性

这时我们看下系统可用内存free -m:

[root@zhrb mysql-5.6.44-linux-glibc2.12-x86_64]# free -mtotal        used        free      shared  buff/cache   available
Mem:           1007         414         469           2         123         442
Swap:           259         233          26

理论上看下是此时是有足够的内存去分配的(注意:此主机上运行了两个博客程序,每个分配的内存为300M,也就是说,剩下的内存虽然多,但是那是被别的程序打上标记了,一旦负载量大,别的程序占用了更多的内存就会跟mysql竞争,就容易导致分配不了足够内存进而分配失败)
但是依然启动失败,那是不是系统的内存分配策略不是有足够内存就全量分配呢?

来看一下:

[root@zhrb mysql-5.6.44-linux-glibc2.12-x86_64]# cat /proc/sys/vm/overcommit_memory
0

那这个overcommit_memory参数是什么?
默认值为:0
从内核文档里得知,该参数有三个值,分别是:

0:当用户空间请求更多的的内存时,内核尝试估算出剩余可用的内存;

1:当设这个参数值为1时,内核允许超量使用内存直到用完为止,主要用于科学计算;

2:当设这个参数值为2时,内核会使用一个决不过量使用内存的算法,即系统整个内存地址空间不能超过swap+50%的RAM值,50%参数的设定是在overcommit_ratio中设定。

也就是说主机内存分配策略也能保证有足够内存的话全量分配,那就不是分配策略的问题。

尝试可行性解决办法

依照上面所述总结结果:
当发生内存竞争时,innoDB的内存如果获取不足就会导致MySQL服务中断。

解决办法:

减小innoDB内存。

解决方式:

修改/etc/my.cnf

文件部分内容如下图所示:

放开注释并修改大小为50M,保存退出。

重启MySQL服务:

[root@zhrb mysql-5.6.44-linux-glibc2.12-x86_64]# service mysql start
Starting MySQL.. SUCCESS!

启动成功。

本次故障排查及解决过程简单截图如下:

MySQL服务中断后重启失败及解决办法(个例)相关推荐

  1. ionic 安装 inappbrowser 插件后编译失败的解决办法

    layout: post title: ionic 安装 inappbrowser 插件后编译失败的解决办法 tags: description: 学习使用 ionic 框架开发 ios app 时遇 ...

  2. linux mysql端口启动失败怎么办,Linux下apache mysql等服务修改默认端口后无法正常启动解决办法...

    Linux下apache mysql等服务修改默认端口后无法正常启动解决办法 linux下 apache 等服务修改默认端口后无法正常启动解决办法 服务器上装了两个webserver,一个是nginx ...

  3. mysqlfront连接MySQL错误_使用MySql-Front远程连接MySQL失败的解决办法

    新安装的mysql默认是root用户,且密码为空,默认端口是3306.通过SSH可以连接并且登录,但是使用MySQL-Front等客户端连接失败. 解决办法: 1.确认Linux防火墙3306端口打开 ...

  4. apmserv5.2.6 mysql启动失败_win7(xp) APMServ5.2.6 Apache启动失败,MYSQL启动失败 的解决办法...

    win7(xp) APMServ5.2.6 Apache启动失败,MYSQL启动失败 的解决办法 1.APMServ程序所在路径不能含有汉字和空格.例子:D:\r\APMServ5.2.6\ 2.去掉 ...

  5. 记一次mysql数据库转储sql文件到另外一台电脑运行失败的解决办法

    记一次mysql数据库转储sql文件到另外一台电脑运行失败的解决办法 将转储的sql文件中创建触发器相关的语句剪切复制到另外的一份文本,保存重新运行sql文件,成功后在把之前剪切的语句复制过来在运行一 ...

  6. win7(xp) APMServ5.2.6 Apache启动失败,MYSQL启动失败 的解决办法

    win7(xp) APMServ5.2.6 Apache启动失败,MYSQL启动失败 的解决办法 1.APMServ程序所在路径不能含有汉字和空格.例子:D:\r\APMServ5.2.6\  2.去 ...

  7. MySQL启动失败——MySQL服务无法启动原因及解决办法

    MySQL启动失败--MySQL服务无法启动原因及解决办法 MySQL启动失败 MySQL启动失败--MySQL服务无法启动原因及解决办法 1.缺乏my.ini文件 2.缺乏data文件 3.端口占用 ...

  8. docker容器mysql修改密码后重启失败

    解决docker容器中mysql修改密码后重启失败 前言 本文内容:1如何修改mysql密码,本地mysql也可以这么修改:2修改mysql容器的环境变量(其他容器同理)3结束语 在docker运行中 ...

  9. windows下环境变量配置后没生效,不重启电脑的解决办法

    本篇文章主要讲解windows配置了环境变量但没有生效的原因及不重启电脑的解决办法 作者:任聪聪 配置环境变量后显示命令不存在,找不到,现象如下. 主要原因 windows配置完毕环境变量,由于某种原 ...

最新文章

  1. 链表系列之单链表——使用单链表实现大整数相加
  2. 机器人 魂斗罗铁血兵团_《魂斗罗铁血兵团:反叛》XBLA游戏下载
  3. 简单解决XP共享连接数10限制(转)
  4. EXP 导出出错解决方案
  5. 判断当前浏览器是不是微信浏览器
  6. 关于SQL\SQL Server的三值逻辑简析
  7. php set get 作用_浅谈PHP拦截器之__set()与__get()的理解与使用方法
  8. 39个seo大师级经典案例
  9. 2019计算机保研经验记录:南开软院、武大、信工所、南大软院、哈工深
  10. 词类与句子成分对应关系 —— 状语篇
  11. php函数形参,PHP中的函数形参的默认值
  12. 概述、 BGP AS 、BGP 邻居、 BGP 更新源 、BGP TTL 、BGP路由表、 BGP 同步
  13. 2018 拼多多 校招真题 最大乘积
  14. ip-纯真库:批量获取ip归属地
  15. 居家办公以外一些有意思的事
  16. 开关电源产生浪涌电流的原因
  17. 【我是初学者】关于获取配置文件.properties的常见三种方式--只是常见的方式,欢迎牛神来加瓦
  18. linux输入法搜狗 修复,搜狗输入法自带修复功能,可以解决无法打字的问题
  19. 线代 | 线性代数的本质 本质 本质 nature
  20. 钉钉全栈化实践总结-前端篇

热门文章

  1. win10如何解决Excel双击打开显示灰色空白?
  2. android端向后台传图片,Android前台从后台下载一张图片 以及 Android前台上传一张图片到后台...
  3. vue动态设置路由重定向
  4. Ubuntu添加和设置开机自动启动程序的方法
  5. 【软件无线电】基于QCustomPlot 实现频谱图、瀑布图、星座图、比特图、音频图
  6. 利用R语言irr包计算ICC值(组内相关系数)
  7. Rosalind第10题——ros_bio10_CONS
  8. 作为一个准研究生,怎样才能在研究生阶段不虚度?
  9. div的display和visible的区别
  10. SQL Server 安全认证知识【1】