前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >获取MySQL历史session

获取MySQL历史session

作者头像
用户1148526
发布2020-03-18 17:31:47
2.5K0
发布2020-03-18 17:31:47
举报
文章被收录于专栏:Hadoop数据仓库

MySQL的show processlist命令可以显示当时的会话情况,但很多时候都需要查看出问题当时的状态,可惜MySQL没有提供类似history session这样的功能。于是为了方便问题排查,自己写了一个非常简单的抓取MySQL现场session的脚本,生产数据库已经用了很长时间,感觉对trouble shooting还是挺有用的。脚本文件get_processlist.sh内容如下:

代码语言:javascript
复制
#!/bin/bash
source /home/mysql/.bashrc
dt=`date '+%y%m%d_%h%m%s'`

mysql -uroot -p123456 -p3306 -h127.0.0.1 -e "
select t1.* 
  from information_schema.processlist t1,
       (select count(1) c from information_schema.processlist where info is not null) t2 
 where t2.c>=50;" > /home/mysql/processlist.txt 

if test -s /home/mysql/processlist.txt; then
    mv /home/mysql/processlist.txt /home/mysql/processlist_18251/processlist_${dt}.txt
    mysql -uroot -p123456 -p18251 -h127.0.0.1 -e "
    select * from information_schema.innodb_trx; 
    select * from information_schema.innodb_lock_waits;
    select * from information_schema.innodb_locks;" > /home/mysql/processlist/innodb_locks_${dt}.txt

else
    rm /home/mysql/processlist.txt
fi

find /home/mysql/processlist/* -type f -mtime +10 -exec rm {} \;

说明:

  1. 只抓取当时正在执行的SQL数量大于等于50的会话情况,输出文件名带有抓取时间。
  2. 同时取得事务和锁的相关信息。
  3. 为防止文件数量过多,只保留最近10天的历史会话文件。

将脚本放到crontab中,每分钟执行一次:

代码语言:javascript
复制
* * * * * /home/mysql/dbbat/get_processlist.sh

严格说获得的是1分钟之内的准现场,这种设计一是实现简单,二是对生产负载无影响。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档