低权限(无权限)时如何在mysql客户端控制台的大量输出中快速定位mysql死锁或慢sql

查看mysql的查看死锁的方式很多,但很多时候我们普通开发者的权限比较低,无法执行某命令。比如本次就准备使用

SHOW ENGINE INNODB STATUS;

命令,但客户端提示权限不够。后来本人找到了另一条低权限的命令

show full PROCESSLIST;

但是show full PROCESSLIST; 这个命令的输出信息太多了,我们公司很多个库都部署在同一个mysql实例中,所以其他库的进程信息也输出到控制台了。在当我们登录mysql客户端后,没办法使用linux平台的grep这些正则过滤命令,要从这么多的输出信息中找出我们关心的数据有点头大。经过我的九牛二虎之力终于发现了一个快捷方式,它不需要进入到mysql客户端内部,直接在linux 的shell环境中。

mysql  -P {port} -u {user} -p{password}  -h {host} {dbname} -e 'SHOW full PROCESSLIST;'  >  ~/proccess-info.txt

其中{port}是mysql服务的端口,{user}是用户名 ,{password} 是此用户的密码(注意这里的密码和前面的-p是挨着一起的,两者间没有空格), {host} 是mysql服务器的ip或主机名 ,~/proccess-info.txt 是输出的文件名
此时将mysql的进程信息输出到mysql 你就可以使用grep命令过滤出你需要的死锁信息了

cat ~/proccess-info.txt | grep {dbname} | grep Locked

第一行就是死锁的线程id,然后就可以在mysql的客户端中使用kill命令杀掉这个线程
注意是mysql的客户端中使用kill,不是linux的shell终端中,linux的kill命令只能杀进程而无法杀线程,这里输出的这个390033是mysql的一个线程id,只能在mysql的客户端中起作用
在这里插入图片描述
当然上面的两步查找死锁线程可以合成一步处理,

mysql  -P {port} -u {user} -p{password}  -h {host} {dbname} -e 'SHOW full PROCESSLIST;' | grep {dbname} | grep Locked 

另外我们也可以查看慢sql,通过sort查看耗时较长的sql

cat ~/draft/mysql_proc.txt | grep {dbname} | sed 's/\t/,/g' | sort -t',' -k6,6nr  | head -n 10

其中-k6,6nr表示对第6列数字进行降序排序(第6列式耗时Time字段)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值