生产数据库因磁盘空间满而引起的死锁故障及解决方法

网友投稿 391 2023-12-14

生产数据库因磁盘空间满而引起的死锁故障及解决方法

今天就跟大家聊聊有关生产数据库因磁盘空间满而引起的死锁故障及解决方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

生产数据库因磁盘空间满而引起的死锁故障及解决方法

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

1. 查看死锁

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

select*from information_schema.INNODB_LOCKS;show processlist;

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 wINNERJOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_idINNER JOINinformation_schema.innodb_trx rON r.trx_id = w.requesting_trx_id; --查看源头sqlSELECTa.sql_text,c.id,d.trx_started,b.processlist_user,b.processlist_hostFROMPERFORMANCE_SCHEMA.events_statements_current aJOIN PERFORMANCE_SCHEMA.threads b ON a.thread_id = b.thread_idJOIN information_schema.PROCESSLIST c ON b.processlist_id = c.idJOIN information_schema.innodb_trx dON c.id = d.trx_mysql_thread_id WHEREc.id = 73921 ORDER BYd.trx_started;

3. 查看死锁日志

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

#打印deadlock日志innodb_print_all_deadlocks=1

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

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

4. 检查磁盘空间

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

5. 解决方案

(1)调整备份策略

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

(2)清理数据库

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

(3)数据库日志表清理

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

(4)建立监控告警体系

zabbix覆盖监控,钉钉预警。

看完上述内容,你们对生产数据库因磁盘空间满而引起的死锁故障及解决方法有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:数据库连接池泄露后的思考是怎样的
下一篇:如何进行Redis5新特性中Streams作消息队列的分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~