问题描述
用户无法登录系统,验证码可以刷出来,登录就超时
原因分析过程
- 9月13日9:33接到用户投诉;
- 9月13日9:36登录4A平台;
- 9月13日9:37连接第一台应用服务器查看日志;
- 9月13日9:39连接第二台应用服务器查看日志;
- 9月13日9:40重启第一台应用服务器查看日志;
- 9月13日9:41重启第二台应用服务器查看日志;
- 9月13日9:42监听日志并验证服务界面是否可登录;
- 9月13日9:45查看应用服务器磁盘和内存使用情况;
- 9月13日9:47详细排查应用日志;
- 9月13日9:50排查数据库服务器状态;
- 9月13日9:52发现是因为定时备份数据库导致磁盘满了无法写入数据
- 9月13日9:55重启数据库服务;
- 9月13日9:56重启应用服务;
- 9月13日9:57服务验证正常;
总结:
1.理智分析现场环境情况
2.不要急着敲命令,有时候越急命令容易敲错并且有时候记不起来
3.用最小的代价分析,如先查看磁盘>查看应用日志--------- df -h > tail -f logs/xcall.log
4.用户无法登录,通过日志查看到死锁,从来不会死锁的表也出现了锁表情况,这时候就该关注数据库问题
5.登录数据库服务器后没有第一时间想到备份导致磁盘满了的问题-也许是因为之前有 zabbix 监控告警
解决方案(定时清理老的备份文件)
当时临时解决方案是删除了一部分老的备份文件重启数据库就好了
我们定时备份是采用数据库导出的方式 文件格式为
2022-09/2022-09-13_12_00.sql
cd /tmp/db_backup/xcall
filename=`date +%Y-%m-%d_%H_%M`
month=`date +%Y-%m`
if [ ! -d $month ];then
mkdir -p $month
fi
mysqldump -u root -p'aaaa' xcall2 > /tmp/db_backup/xcall/$month/$filename.sql
crontab -e
由于之前都是手动删除容易忘记,写个定时自动删除前3个月的备份文件
#!/bin/sh
dir=/tmp
array=(a b c)
echo "开始清理备份文件---- 目录数:"${#array[@]}
for(( i=0;i<${#array[@]};i++))
do
d=$dir/${array[i]}
folder1=$d/`date -d '-4 month' +%Y-%m`
folder2=$d/`date -d '-3 month' +%Y-%m`
folder3=$d/`date -d '-2 month' +%Y-%m`
if [ -d $folder1 ];then
rm -rf $folder1
fi
if [ -d $folder2 ];then
rm -rf $folder2
fi
if [ -d $folder3 ];then
rm -rf $folder3
fi
echo "deleted" $i "folder:"$folder1
echo "deleted" $i "folder:"$folder2
echo "deleted" $i "folder:"$folder3
echo "======================"
done
效果图:
以后就不怕数据库所在服务器磁盘爆满了
知识点总结
- 问题分析与排查能力
- 熟练敲命令的重要性
- 快捷指令的重要性======不过一般都是通过堡垒机啥的,用起来没有自己的工具习惯
- linux for 循环
- linux 当前日期减1,Linux date命令用法和使用技巧(获取今天、昨天、一分钟前等)