show innodb status只是其一种模式的直接展现,并且只能交互式开启,无法自动循环捕获信息
innodb状态信息输出到 err 日志   在如何 库 下都可以,推荐在 test  数据库下创建如下表
mysql> create table innodb_monitor(a int) engine=innodb;
Query OK, 0 rows affected (0.09 sec)

mysql> create table innodb_tablespace_monitor(a int) engine=innodb;
Query OK, 0 rows affected (0.12 sec)

mysql> create table innodb_lock_monitor(a int) engine=innodb;
Query OK, 0 rows affected (0.13 sec)

mysql> create table innodb_table_monitor(a int) engine=innodb;
Query OK, 0 rows affected (0.09 sec)

创建表后innodb会每过15秒输出一次innodb状态信息到error log,通过删除表停止该monitor功能。

  • innodb_monitor:实际上就是show engine  innodb status\G

  • innodb_lock_monitor:和innodb_monitor差不多,但还会有更多关于锁的信息

  • innodb_table_monitor:系统中所有innodb的表的一些结构和内部信息输出

  • innodb_tablespace_monitor:输出的是tablespace的信息,注意该monitor输出的只是共享表空间的信息

不包含独立表空间信息。

  1. 对于死锁,MySQL并没有提供提供直接的变量来表示。对于5.5版本之后的performance_shcema可以提供锁的详细信息(但我们还是5.0呢),对于InnoDB自带的监控器 Innodb_lock_monitor 其输出总是输出到错误日志中,不方便进行对比。

我监控采用的是zabbix,采用agent 被动方式向zabbix server传送数据。脚本为shell,采用show innodb status 重定向
核心代码:
检测是否为新的死锁信信息:
  New_deadlock() {new_line_tile=$(grep -n "LATEST DETECTED DEADLOCK" $1 | cut -d ':' -f 1)new_line_time=$(echo "$new_line_tile + 2" | bc)last_dect_time="$(head -n $new_line_time $1 | tail -n 1) ###截取死锁发生的时间戳[ -e $2 ] || cp $1 $2 #拿这次输出信息,和上次输出信息对比;如果是第一次检测,将这次输出信息cp作为上次输出信息old_line_tile=$(grep -n "LATEST DETECTED DEADLOCK" $2 | cut -d ':' -f 1)if [ -z $old_line_tile ];thenecho 1mv $1  $2  ##判断上次输出是否为死锁,不是的话,直接返回1 表明最近一次是新的死锁。并将 此次输出信息重命名exit 1else      ##否则对比两次的时间戳old_line_time=$(echo "$old_line_tile + 2" | bc) old_last_dect_time="$(head -n $old_line_time  $2 | tail -n 1)"mv $1  $2 #输出信息为下一次检测做准备if [ "$last_dect_time" = "$old_last_dect_time" ];thenecho 0elsecp $1 /tmp/$1_detail #已判定为死锁,需要保留作案信息echo 1fifi
}
deadlock_check() {case $1 in1)$MYSQL_BIN -u $user -p$password  -S $SOC1 -e "show engine innodb status\G" > /tmp/innodb_status_1_$dthmhave_dead_lock=$(grep -c  "LATEST DETECTED DEADLOCK" /tmp/innodb_status_1_$dthm)#判断这次检测是否包含死锁信息,包含的话 让 New_dead_lock 做死锁对比否则 返回0if [ $have_dead_lock -gt 0 ];thenNew_deadlock /tmp/innodb_status_1_$dthm /tmp/innodb_status_1_$dtelseecho 0fi;;2)$MYSQL_BIN -u $user -p$password  -S $SOC2 -e "show engine innodb status\G" > /tmp/innodb_status_2_$dthmhave_dead_lock=$(grep -c  "LATEST DETECTED DEADLOCK" /tmp/innodb_status_2_$dthm)if [ $have_dead_lock -gt 0 ];thenNew_deadlock /tmp/innodb_status_2_$dthm /tmp/innodb_status_2_$dtelseecho 0fi;;3)$MYSQL_BIN -u $user -p$password  -S $SOC3 -e "show engine innodb status\G" > /tmp/innodb_status_3_$dthmhave_dead_lock=$(grep -c  "LATEST DETECTED DEADLOCK" /tmp/innodb_status_3_$dthm)if [ $have_dead_lock -gt 0 ];thenNew_deadlock  /tmp/innodb_status_3_$dthm /tmp/innodb_status_3_$dtelseecho 0fi;;4)$MYSQL_BIN -u $user -p$password  -S $SOC4 -e "show engine innodb status\G" > /tmp/innodb_status_4_$dthmhave_dead_lock=$(grep -c  "LATEST DETECTED DEADLOCK" /tmp/innodb_status_4_$dthm)if [ $have_dead_lock -gt 0 ];thenNew_deadlock /tmp/innodb_status_4_$dthm /tmp/innodb_status_4_$dtelseecho 0fi;;*)echo $ERRORexit 1;;esac
}
case  $1中的变量是针对不同机器上多个实例的情况,传送socket参数

转载于:https://blog.51cto.com/huanghualiang/1192051

MySQLinnodb_monitor及死锁检测相关推荐

  1. linux死锁检测的一种思路【转】

    转自:http://www.cnblogs.com/mumuxinfei/p/4365697.html 前言:  上一篇博文讲述了pstack的使用和原理. 和jstack一样, pstack能获取进 ...

  2. linux 内核 死锁 检查,一种linux内核自旋锁死锁检测报告系统和方法与流程

    本发明涉及内核死锁检测领域,具体的说是一种linux内核自旋锁死锁检测报告系统和方法. 背景技术: linux内核死锁是长期困扰内核开发人员的问题之一,但自内核引入lockdep调试模块之后,内核死锁 ...

  3. 10、MySQL锁等待,死锁,死锁检测

    使用数据库时,有时会出现死锁.对于实际应用来说,就是出现系统卡顿. 死锁是指两个或两个以上的事务在执行过程中,因争夺资源而造成的一种互相等待的现象.就是所谓的锁资源请求产生了回路现象,即死循环,此时称 ...

  4. java简单的死锁检测(转载线下代码)

    一个简单的死锁检测功能. 1.探测出死锁 主要是:java.lang.management类的关于线程的系列方法 一个线程监控类 ThreadMXBean x=ManagementFactory.ge ...

  5. mysql二级封锁协议_MySQL 行锁、两阶段锁协议、死锁以及死锁检测

    行锁 MySQL的行锁都是在引擎层实现的,但是 MyISAM 不支持行锁,意味着并发控制只能使用表锁,同一张表任何时刻只能被一个更新在执行,影响到业务并发度.InnoDB 是支持行锁的,这也是 MyI ...

  6. mysql 命令 kill_MySQL之死锁检测

    最近,笔者在查看线上服务日志时,发现spring大量异常,异常中都显示了同样的报错信息,信息如下. Deadlock found when trying to get lock; try restar ...

  7. 死锁的充分必要条件、死锁预防、死锁避免、死锁检测和解除

    2.19.2 死锁的条件 必要条件 互斥:一次只有一个进程可以使用一个资源 占有且等待:当进程等待其他资源时继续占有已有的资源 不可抢占:进程不能强行占有其他进程占有的进程 充分条件 循环等待:存在一 ...

  8. mysql死锁检测算法_MySQL InnoDB如何应付死锁

    死锁是事务处理型数据库系统的一个经典问题,但是它们并不是很危险的, 除非它们如此地频繁以至于你根本处理不了几个事务. 当因死锁而产生了回滚时,你通常可以在你的应用程序中重新发出一个事务即可. Inno ...

  9. 浅析MySQL死锁检测

    MySQL发生死锁时,通过show engine innodb status;命令并不能看到事务中引起死锁的所有SQL语句. 死锁排查起来就比较麻烦,需要查询events_statements_%表, ...

最新文章

  1. Linux那些事儿 之 戏说USB(10)模型,又见模型
  2. 女朋友分手那天,女朋友说闺蜜老公收入是我 5 倍!还不去这些公众号学习?...
  3. Atomic原子类常用方法总结(包含四大类型)
  4. 扩展Snackbar 使其支持居中显示
  5. vue 监听map数组变化_vuex state中的数组变化监听实例
  6. 大型打脸现场!被藐视的少女摇身一变成为“抽象代数之母”,哲学教授只能跪地喊爸爸...
  7. CodeForces 297A Parity Game (脑补题)
  8. hdu 5148 cities 树形DP
  9. java知识总结-25
  10. skimage exposure模块解读
  11. Linux 启动snort服务,在 Ubuntu 15.04 中如何安装和使用 Snort
  12. 九九乘法表c语言四种,C语言实现九九乘法表(四种情况)
  13. 自己在inode客户端的大量问题(不断更新中)(2012-02-23 21:24 )
  14. 服务器2012r2安装虚拟,Windows2012R2创建Hyper-v虚拟化群集
  15. 第九课堂-#零基础学服装设计# 服装立体裁剪体验课(第18期)
  16. 【强烈推荐】ProxyPool-快速构建免费代理池
  17. 淹没之城(Submerged).PC单机游戏 免费下载.虚幻4 打造
  18. 文化先锋A6客户端自动登陆
  19. 区块链:雷电网络开发预览版
  20. android如何实现用户注册功能,Android 实现简单的登录注册功能(SharedPreferences和SQLite)...

热门文章

  1. 在Cisco路由器中配置DHCP服务器
  2. 工作一周了,紧张 + 累
  3. OC基础回想(十二)协议
  4. Java使用Jetty实现嵌入式Web服务器及Servlet容器
  5. maven多模块eclipse jetty热部署
  6. javascript刷新页面的集中办法
  7. Embedded Linux Primer----嵌入式Linux基础教程--导论
  8. 取一个字符串中的数字
  9. Java Lock接口分析之ReentantReadWriteLock
  10. 21 个HTML网页转RSS Feeds的工具