MySQL Innodb 神秘消失
问题描述:
早晨接到 Zabbix 报警,提示 Host: 10.10.1.2, MySQL 主从同步失败。
登录服务器查看具体情况。
shell > mysql mysql> show slave status\G Slave I/O thread : YES
Slave SQL thread : NO Slave SQL: Error 'Unknown storage engine 'InnoDB'' on query. Default database: 'baeng_tv'. Query: 'UPDATE std_tv_card SET uid='', devicetoken='60000AM1500D16972129_569C' WHERE id=''', Error_code: Slave: Unknown storage engine 'InnoDB' Error_code:
# 这是 show slave status\G 看到的一些状态信息,说不支持 InnoDB 引擎。这不开玩笑呢么,又不是第一次跑。
shell > vim /data/mysql_data/hostname.err Version: '5.5.28-log' socket: '/tmp/mysql.sock' port: Source distribution
:: mysqld_safe Number of processes running now:
:: mysqld_safe mysqld restarted :: InnoDB: The InnoDB memory heap is disabled
:: InnoDB: Mutexes and rw_locks use GCC atomic builtins
:: InnoDB: Compressed tables use zlib 1.2.
:: InnoDB: Initializing buffer pool, size = .0G
InnoDB: mmap( bytes) failed; errno
:: InnoDB: Completed initialization of buffer pool :: InnoDB: Fatal error: cannot allocate memory for the buffer pool
:: [ERROR] Plugin 'InnoDB' init function returned error.
:: [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. :: [Note] Server hostname (bind-address): '0.0.0.0'; port:
:: [Note] - '0.0.0.0' resolves to '0.0.0.0';
:: [Note] Server socket created on IP: '0.0.0.0'. :: [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.003702' at position , relay log './hostname-relay-bin.010674' position:
:: [Note] Slave I/O thread: connected to master 'repl@10.10.1.8:3306',replication started in log 'mysql-bin.003702' at position
:: [Note] Event Scheduler: Loaded events
:: [Note] /usr/local/mysql-5.5/bin/mysqld: ready for connections.
Version: '5.5.28-log' socket: '/tmp/mysql.sock' port: Source distribution :: [ERROR] Slave SQL: Error 'Unknown storage engine 'InnoDB'' on query. Default database: 'baeng_tv'. Query: 'UPDATE std_tv_card SET uid='', devicetoken='60000AM1500D16972129_569C' WHERE id=''', Error_code:
:: [Warning] Slave: Unknown storage engine 'InnoDB' Error_code:
:: [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.003702' position
# mysql.err
InnoDB: Initializing buffer pool, size = .0G
# 初始化缓存池,大小为 1G
InnoDB: Fatal error: cannot allocate memory for the buffer pool
# 无法为 InnoDB 缓存池分配内存
Plugin 'InnoDB' init function returned error.
# InnoDB 插件 init 函数返回错误
Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
# InnoDB 插件存储引擎注册失败
# 接着就是初始化 Slave SQL thread 启动同步,I/O 线程连接 master。
# 最后提示,Slave SQL 错误,未知的存储引擎,查询语句 'UPDATE 失败'。
解决方法:
shell > free -m
# 当时空闲内存只有 936M,而初始化的缓存池为 1G。
# 看到这里,应该知道故障是由系统内存不足造成的,该机器内存为 24G。上面就跑了一个 MySQL Slave 跟一些任务计划。
# 说到任务计划,这是一些查询数据,然后写入 ElasticSearch 生成索引的一些 PHP 脚本。
shell > ps aux | grep php | wc -l
# 好家伙!!!
# 任务计划是每 5、10、15 分,分别执行不同的 PHP 脚本。执行完、下次循环。
# 也就是如果没有执行完,等到下一个时间点就会重新启动一个 PHP 脚本... 所以占用了大量系统内存。
shell > ps aux | grep -v grep | grep php | awk '{print $2}' | xargs -i kill {}
# 先将这些阻塞的进程全部杀死
shell > free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
# 内存释放了
shell > /etc/init.d/mysql.server restart
shell > mysql
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master:
# 主从同步正常,延迟就让它自己补上吧,过一会就好了。
# 故障消除
# 接下来让故障不再出现
shell > vim script/yiic_index.sh
#!/bin/bash logfile='/root/script/logs/yiic.log'
filepath='/data/git-webroot/yiic index' line=`ps aux | grep -v grep | grep 'yiic index' | wc -l` if [ $line -eq ]:then
/usr/local/php/bin/php $filepath >/dev/null &
else
echo `date "+%F %T"` $filepath >> $logfile
exit
fi # End shell > crontab -e */ * * * * /root/script/logs/yiic_index.sh
# 这样就控制住了 PHP 进程的数量。
# 但是,这样写脚本会出现僵尸进程。
# 先执行 sh 脚本,然后将 php 进程放入后台,退出 sh 脚本,这样 sh 就是 PHP 的父进程了,所以产生僵尸。
# 但这是可控的,如果 PHP 执行时间过长,下次 crond 调用 sh 时,是不执行 PHP 的。
# 生成的僵尸进程也不必担心,当 PHP 执行完毕后,僵尸自动死亡。
shell > crontab -e */ * * * * timeout /usr/local/php/bin/php /data/git-webroot/yiic index >/dev/null
# 也可以这样来控制 PHP 进程执行时间,随你选咯
MySQL Innodb 神秘消失的更多相关文章
- MySQL InnoDB 群集–在Windows上设置InnoDB群集
InnoDB集群最需要的功能之一是Windows支持,我们现在已将其作为InnoDB Cluster 5.7.17预览版 2的一部分提供.此博客文章将向您展示如何在MS Windows 10上运行In ...
- Mysql InnoDB 共享表空间和独立表空间
前言:学习mysql的时候总是习惯性的和oracle数据库进行比较.在学习mysql InnoDB的存储结构的时候也免不了跟oracle进行比较.Oracle的数据存储有表空间.段.区.块.数据文件: ...
- MYSQL INNODB PAGE一督
MYSQL INNODB PAGE一督
- MySQL InnoDB表--BTree基本数据结构
MySQL InnoDB表是索引组织表这一点应该是每一个学习MySQL的人都会首先学到的知识,这代表这表中的数据是按照主键顺序存储,也就是说BTree的叶子节点存储了所有该行的数据. 我最开始是搞Or ...
- MySQL Innodb数据库性能实践——热点数据性能
摘要: 对于大部分的应用来说,都存在热点数据的访问,即:某些数据在一定时间内的访问频率要远远高于其它数据. 常见的热点数据有“最新的新闻”.“最热门的新闻”.“下载量最大”的电影等. 为了了解MySQ ...
- Mysql InnoDB行锁实现方式(转)
Mysql InnoDB行锁实现方式 InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的.InnoDB这种行锁实现特点 ...
- Mysql InnoDB行锁实现方式
Mysql InnoDB行锁实现方式 InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的.InnoDB这种行锁实现特点 ...
- mysql innoDB 挂了的临时解决方案
Mysql InnoDB: Error: checksum mismatch by Mattias Hemmingsson on December 23, 2013 in Linux • 6 Comm ...
- WDCP安装常用组件(memcache、mysqli、PDO_MYSQL、mysql innodb、libmcrypt、php zip)的方法
为有更好的性能,也为更简洁的系统,一些不是常用或不是基本的功能,都将做为可选的安装组件需要用到的就安装 注意:如果安装时遇到 ./configure: Permission denied提示,很有可能 ...
随机推荐
- pat甲级 1155 Heap Paths (30 分)
In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...
- (转)GIL 与 Python 线程的纠葛
原文地址:http://zhuoqiang.me/python-thread-gil-and-ctypes.html 作者:Qiang GIL 与 Python 线程的纠葛 GIL 是什么?它对 py ...
- Regexper:牛逼的 JavaScript 正则可视化工具
RequireJS Optimizer 是 RequireJS 自带的前端优化工具,可以对 RequireJS 项目中的 JavaScript & CSS 代码使用 UglifyJS 或者 C ...
- eclipse导出jar,再转换为exe可执行程序
转自: https://blog.csdn.net/mommomm/article/details/8227876 若只想知道如何把jar转换成exe,直接看第四步即可. 一.导出jar文件: 选中你 ...
- 回文字符串的变形——poj1159
回文字符串 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当然, ...
- elastic search6.2.2 实现用户搜索记录查询(去重、排序)
elastic search6.2.2 实现搜索记录查询 ,类似新浪微博这种,同样的搜索记录后面时间点的会覆盖前面的(主要思路:关键词去重,然后按时间排序) 先创建索引 //我的搜索 PUT my_s ...
- 没有80端口的备案域名,如何做微信公众平台的开发?本文介绍可以通过任何域名来做开发,www.baidu.com和www.163.com和www.so.com这样的域名都可以
1.首先做过微信开发的朋友都知道,微信后台需要绑定80端口的备案域名,如果此时手上没有80端口的备案域名就不能进行开发了吗?当然不是 首先在这些地方绑定一个备案域名,国内公司的网址基本上是有备案的如w ...
- 使用Nancy搭建简单的Http服务的示例demo
刚刚接触Nancy没几天,暂时还不会使用Nancy来做web开发,只是使用Nancy实现了一个简单的Http服务的Demo程序,实现对Post和Get请求的处理. Demo的示例代码地址如下:http ...
- 1DAY 初识Python
一 本节目标 了解编程语言 了解python及与其他语言的优劣对比 安装python解释器及环境变量配置.运行python交互式环境 打印hello world程序 初识变量.用户输入,流程控制,wh ...
- python-redis-pipe文件
redis导入数据比较头疼的事情,涉及几千万,导入还是很耗时,通过生成pipe文件的方式比较快捷. python3.6.1版本 在linux环境下运行 with open("data1&qu ...