今天同事们突然说系统挂了,访问不了了。我赶紧看了下系统日志,提示报错Caused by: java.sql.SQLException: Table './haoma517/@6d59@6c5f_@676d@5dde@5e02_2' is marked as crashed and should be repaired,我一看数据库的问题,就重启了一下数据库服务,结果还是不行,然后看了下系统磁盘,发现磁盘竟然满了。我以为是照片存储过多,然后赶紧去备份照片到本地,删除系统里面的照片,发现照片根本就没那么大。后来检查了下文件目录大小,才发现问题,原来是我做主从备份时候,没有配置及时删除生成的二进制日志文件导致的,binlog文件太多而没有及时删除导致磁盘满了,这个确实是我大意了。现在讲一下解决问题的方法。
1.Caused by: java.sql.SQLException: Table './haoma517/@6d59@6c5f_@676d@5dde@5e02_2' is marked as crashed and should be repaired这个问题实际是磁盘不足导致的,这时候只需要将出现这种问题的表修复一下就可以了,可以试用navicat打开数据库进行表格修复。操作方法如下:
在修复表格之前,可以先双击看是否能打开,如果打不开就需要修复一下。
2.删除无用的binlog文件,操作方法如下:
2.1 连接上mysql数据库执行命令:
show binary logs;
查看二进制日志的文件列表,如下图
2.2 执行命令
purge binary logs to 'master-bin.XXX';
删除二进制日志,该命令会将XXX前面的日志文件全部删除,例如:
purge binary logs to 'master-bin.000015';
上面的命令会将master-bin.000001 ~ master-bin.000014的日志文件全部删除,保留master-bin.000015文件。操作完可以再次执行show binary logs;命令查看结果如下:
可以看到master-bin.000001 ~ master-bin.000014的日志文件确实被删除掉了。
3. 为了防止以后再出现类似问题,应该配置自动删除过期不用的二进制日志文件,方法如下:
修改mysql的配置文件/etc/my.cnf,添加自动删除二进制日志文件的配置expire_logs_days = 5
配置binlog文件只保留指定天数内的,过期自动删除,这样就可以避免掉二进制日志一直增加导致磁盘不够用的情况了,这次确实是我自己大意了,该打!!!
4.附带添加centos查看文件大小的命令如下:
du -h --max-depth=1 ${pwd} 可以查看当前目录下文件的大小,例子如下:
这个可以便于我们查看到底是哪个目录文件过大