MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > linux / 正文

详解linux磁盘空间满而引起的死锁故障及解决方案

2024-11-26 14:50 huorong linux 8 ℃ 0 评论

概述

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


1、查看死锁

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

select * from information_schema.INNODB_LOCKS;
show processlist;



2、查看阻塞锁

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

--查看哪个线程被哪个堵塞,waiting_thread_id代表等待线程,blocking_thread_id代表堵塞线程
SELECT
	r.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 
FROM
	information_schema.innodb_lock_waits w
	INNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id
	INNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id;
 
--查看源头sql
SELECT
	a.sql_text,
	c.id,
	d.trx_started,
	b.processlist_user,
	b.processlist_host 
FROM
	PERFORMANCE_SCHEMA.events_statements_current a
	JOIN PERFORMANCE_SCHEMA.threads b ON a.thread_id = b.thread_id
	JOIN information_schema.PROCESSLIST c ON b.processlist_id = c.id
	JOIN information_schema.innodb_trx d ON c.id = d.trx_mysql_thread_id 
WHERE
	c.id = 73921 
ORDER BY
	d.trx_started;



3、查看死锁日志

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

#打印deadlock日志
innodb_print_all_deadlocks=1

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

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


4、检查磁盘空间

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



5、解决方案

1)调整备份策略

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

2)清理数据库

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

3)数据库日志表清理

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

4)建立监控告警体系

zabbix覆盖监控,钉钉预警。


觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

Tags:linux磁盘满了

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言