问题发成场景:服务器端向MySQL插入一条数据,报错,提示the table XXX is full。
1、根据提示以为该表设置了存储上限,查看该表的存储上限tmp_table_size 和 max_heap_table_size ,发现并没有超出限制。
2、重启Mysql服务,service mysql restart,发现MySQL服务无法启动.
3、使用service mysql status查看当前MySQL服务状态,提示mysql.service failed because the control process exited with error code;mysql.service:main process exit,code=exited,status=1/failure。
4、根据网上一哥们的建议,有可能是硬盘满了,使用df -h 查看硬盘存储情况,发现/dev/vda1 的使用情况已经是100%了。
5、思考了一波,有可能是日志文件存储太多造成的,去往MySQL日志路径,发现没有很大。
6、去往Tomcat日志目录logs,发现日志存放太多了,问题源就在这里,这里使用到一个命令:du --max-depth=1 ,作用就是查询当前目录下一级目录的文件大小
7、清空catalina.out文件,命令:cat /dev/null >catalina.out
8、当然这样还是不能彻底解决问题,我们可以写一个shell脚本让他定期每天/每周执行,帮助我们删除比如说一周前的日志文件,或者将日志文件备份到其他地方
#!/bin/bash
logs_paths[0]="/root/workspace/tomcat/logs"
for logs_path in ${logs_paths[@]};
do
find $logs_path -mtime +7 -name "localhost_access_log.*.txt" -exec rm -rf {} \;
find $logs_path -mtime +7 -name "catalina.*.log" -exec rm -rf {} \;
find $logs_path -mtime +7 -name "manager.*.log" -exec rm -rf {} \;
find $logs_path -mtime +7 -name "host-manager.*.log" -exec rm -rf {} \;
find $logs_path -mtime +7 -name "fileservice.log.*" -exec rm -rf {} \;
find $logs_path -mtime +7 -name "localhost.*.log" -exec rm -rf {} \;
#备份日志
cp $logs_path/catalina.out $logs_path/catalina.`date +%Y-%m-%d`.log
#清空日志
cat /dev/null > $logs_path/catalina.out
echo $logs_path
done
9、清理之后,启动MySQL服务,成功!