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

发表于:2019-12-31 10:10

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:波波说运维

  今天主要介绍一次因磁盘空间满导致的事故及解决方法。
  磁盘空间满
  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 wINNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_idINNER JOIN information_schema.innodb_trx r ON r.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 ON a.thread_id = b.thread_idJOIN information_schema.PROCESSLIST c ON b.processlist_id = c.idJOIN information_schema.innodb_trx d ON 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覆盖监控,钉钉预警。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号