问题描述
Caused by: java.sql.SQLException: The table ‘XXX’ is full(mysql the table is full)
解决方案
导致错误的可能因素:
1、磁盘满了;
2、表数据太多了
排查问题步骤:
1、表数据过多
1.1 查询表
单表数据过大将会导致异常
大概七八位数左右数据就可能打满,比如有些AOP记录、日志记录等数据过多。。
此种情况需要清理表数据即可。。
use information_schema;
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='数据库名称' and table_name='表名称';
2、磁盘满
2.1 查看磁盘占用情况
使用如下命令
df -h
2.2 查看哪个文件占用多
使用如下命令
du -sh *
2.3 可能因素binlog
其实大多数情况是因为binlog,清除掉里面的mysql-bin.0004**之前的binlog纪录。
如果数据操作频繁会产生大量的日志,在/usr/local/mysql/var/下产生mysql-bin.0000* 类似的文件,一般都在几十MB到几个GB,更甚会占满整个硬盘空间,从而导致mysql无法启动或报错。。
rm -rf mysql-bin.00040*;
在服务器上直接删除binlog日志(物理删除),会造成MySQL无法启动。
这是因为binlog文件是通过读取binlog.index文件加载的,需要进入该文件把对应的binlog记录删除或注释掉就可以了
vim mysql-bin.log.index
如果不需要binlog的话可以关闭
全局找一下my.cnf文件
find /* -name my.cnf
修改my.cnf文件,使用#注释掉如下两行:
#log-bin=mysql-bin
#binlog_format=mixed
然后再重启即可
/etc/init.d/mysql restart