磁盘爆满,服务异常同时MySQL报“Table ** is marked as crashed and should be repaired”问题解决

本文讲述了作者如何处理一次网站被恶意流量攻击导致磁盘空间满载,以及修复数据库表异常的过程,包括日志清理、磁盘释放和数据表修复步骤。

今天小站被攻击了,简单整理下解决的方法,方便有遇到同样问题的小伙伴,可以快速定位问题,并解决。

 

服务无法正常响应

网站是自己开发的,就是玩儿,也没有太多的功能和访问限制,就一个单一的页面和下载功能。有些小伙伴估计是闲的蛋疼了,想要去挑战别人的技术(恭喜你,这次你赢了),总是有人没事刷刷流量,刷访问,服务器是阿里云,磁盘存储比较小,只有40GB。

通过服务器端访问返回的错误,可以看到是服务器端异常,首先,打算重启一下tomcat,结果再次启动时,直接卡着,然后我通过口令df -h查看磁盘空间,卧槽,爆满。

[root@iZ2ze7wyymbgnonfk0zn48Z logs]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   39G  183M 100% /
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  476K  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
tmpfs           379M     0  379M   0% /run/user/0

赶紧删除服务器上面的一些安装包和软件,试图释放一些资源,让服务先正常启动,删了些安装包之后,再次查看,还是100%使用,资源并没有释放,还以为是句柄数造成的资源被占用没有及时释放,reboot,重启了阿里云服务器。再次查看,还是一样,我才意识到问题没有我想象的那么简单。

 

磁盘饱满

看是查看磁盘文件大小:

du -lh --max-depth=1 /

发现usr文件夹下磁盘占用较多(以个人的路径为主)

继续查看/usr下文件大小,

du -lh --max-depth=1 /usr/

....

直到最后定位到最大的那个文件夹下的文件,我这里最后定位到了tomcat下log

[root@iZ2ze7wyymbgnonfk0zn48Z usr]# du -lh --max-depth=1 /usr/local/tomcat/logs/
33G	/usr/local/tomcat/logs/

果断干掉那些日志文件。空间也得到短暂的释放。

 

数据库挂掉

资源释放以后,重新启动服务,这次服务器启动正常,但是数据库在连接过程中,有报错了,提示表异常,需要修复。

 

表需要修复:

Table ** is marked as crashed and should be repaired; nested exception is java.sql.SQLException

ok,进入到Mysql。直接操作数据表。

# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| idea_db            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
mysql> use idea_db;
Database changed

mysql> check table post_basic;
+--------------------+-------+----------+-----------------------------------------------------------+
| Table              | Op    | Msg_type | Msg_text                                                  |
+--------------------+-------+----------+-----------------------------------------------------------+
| idea_db.post_basic | check | warning  | Table is marked as crashed                                |
| idea_db.post_basic | check | error    | Size of datafile is: 75198464         Should be: 75198476 |
| idea_db.post_basic | check | error    | Corrupt                                                   |
+--------------------+-------+----------+-----------------------------------------------------------+
3 rows in set (0.01 sec)

切换数据库,找到异常的那张表。执行repair table 表名,修复表即可。

mysql> repair table post_basic;

+--------------------+--------+----------+-------------------------------------------------------+
| Table              | Op     | Msg_type | Msg_text                                              |
+--------------------+--------+----------+-------------------------------------------------------+
| idea_db.post_basic | repair | info     | Found block that points outside data file at 75198436 |
| idea_db.post_basic | repair | status   | OK                                                    |
+--------------------+--------+----------+-------------------------------------------------------+
2 rows in set (9.34 sec)


mysql> check table post_basic;
+--------------------+-------+----------+----------+
| Table              | Op    | Msg_type | Msg_text |
+--------------------+-------+----------+----------+
| idea_db.post_basic | check | status   | OK       |
+--------------------+-------+----------+----------+
1 row in set (0.62 sec)

至此,数据表修复完成,重启服务,重启数据库。访问小站,恢复正常。

后面也会对网站做些安全处理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

终码一生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值