mysql磁盘满了锁库,记一次生产数据库因磁盘空间满而引起的死锁故障及解决过程...

今天主要介绍一次因磁盘空间满导致的事故及解决方法。

e9e6fd494f199422d2a2d84db610c809.png

1. 查看死锁

最近业务反馈无法登陆系统,需要我这边配合检查下,这里之所以先看死锁是因为这系统一般出问题都是这原因..

select * from information_schema.INNODB_LOCKS;show processlist;

d748d2dffeed5a72fc3993666c47a114.png

2. 查看阻塞锁

看一下这里面是被什么语句所阻塞了

--查看哪个线程被哪个堵塞,waiting_thread_id代表等待线程,blocking_thread_id代表堵塞线程SELECTr.trx_id waiting_trx_id,r.trx_mysql_thread_id waiting_thread_id,r.trx_query waiting_query,b.trx_id blocking_trx_id,b.trx_mysql_thread_id blocking_thread_id,b.trx_query blocking_query,now( ) - r.TRX_STARTED blocking_time FROMinformation_schema.innodb_lock_waits wINNER JOIN information_schema.innodb_trx b ONb.trx_id=w.blocking_trx_idINNER JOIN information_schema.innodb_trx r ONr.trx_id=w.requesting_trx_id; --查看源头sqlSELECTa.sql_text,c.id,d.trx_started,b.processlist_user,b.processlist_host FROMPERFORMANCE_SCHEMA.events_statements_current aJOIN PERFORMANCE_SCHEMA.threads b ONa.thread_id=b.thread_idJOIN information_schema.PROCESSLIST c ONb.processlist_id= c.idJOIN information_schema.innodb_trx d ONc.id= d.trx_mysql_thread_idWHEREc.id=73921ORDER BYd.trx_started;

8317ca16649398d63bd06251473aaf20.png

3. 查看死锁日志

因为我配置文件是加了参数:

#打印deadlock日志innodb_print_all_deadlocks=1

所以这里直接看mysqld.log情况

ac69f24ff1c6a48ce9f5af4a171073ac.png

可以发现日志提示磁盘满了...

4. 检查磁盘空间

检查后发现果然是满了,事后发现是备份策略每天备份一次,14天清理,但数据越来越大导致空间不够用了,清理后调整备份策略即可。

887ba5a37c0f3e6f19d999d311c856e1.png

5. 解决方案

(1)调整备份策略

修改为每两天一次全备,14天自动清理

(2)清理数据库

清理数据库无用表及无用对象

(3)数据库日志表清理

建立归档库,定期挪走相关日志表,隔7天后drop掉

(4)建立监控告警体系

zabbix覆盖监控,钉钉预警。

【编辑推荐】

【责任编辑:赵宁宁 TEL:(010)68476606】

点赞 0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值