Login
网站首页 > 文章中心 > 其它

MySQL 出现 The table is full 的解决方法【转】

作者:小编 更新时间:2023-09-04 18:33:55 浏览量:357人看过

当我们要写入新数据而发生"The table is full"告警错误时,先不要着急,按照下面的思路来逐步分析即可:

①.、查看操作系统以及MySQL的错误日志文件

确认操作系统的文件系统没有报错,并且MySQL的错误日志文件中是否有一些最直观的可见的错误提示.

执行 df -h 查看剩余磁盘空间,如果发现磁盘空间确实已经用完,则尽快删除不需要的文件.

如果通过 du 计算各个目录的总和却发现根本不会用完磁盘空间时,就需要注意了,可能是某个被删除的文件还没完全释放,导致 df 看起来已经用完,但 du 却又统计不到.

这时候可以执行?lsof | grep -i deleted?找到被删除的大文件,将其对应的进程杀掉,释放该文件描述符.

MySQL 出现 The table is full 的解决方法【转】-图1

如果该进程不能被杀掉,例如是 mysqld 进程在占用的话,可以在 MySQL 里找到是哪个内部线程在用,停止该线程即可.

曾经发生过这样一个例子:

用vim打开MySQL的slow query log,退出时选择了 "wq" 指令,也就是保存退出,结果悲剧发生了.

因为在其打开的那段时间内,slow query log有新日志产生,会持续写入,但他退出时采用保存退出的方式,变成了一个"新"文件(或者说新文件句柄 file handler),这个"新"文件无法被mysqld进程识别,

mysqld进程依旧将slow query log写入到原来它打开的那个文件(或者说文件句柄)里,该日志文件在持续增长,但手工保存退出的文件却再也不增长了,直接查看文件看不出任何异常.

这时候只能用?lsof -p +pidof mysqld+?才能看到该文件.

解决方法很简单,将原来的文件备份一下,执行下面的指令:

FLUSH SLOW LOGS;

如果是MyISAM引擎

在行指针设置较小不够用的时候,为提高MyISAM表最大容量,可以修改表定义设定MAX_ROWS的值:

ALTER TABLE +xx+ ENGINE=MyISAM MAX_ROWS=nn

备注:?表定义中,?AVG_ROW_LENGTH?属性定义的是 BLOB/TEXT 字段类型的最大长度.

如果是InnoDB引擎

解决方法:

①.、ibdata*的最后一个文件(?非最后一个文件无法设置为自动增长?)设置成自动增长;

顺便说下,如果数据表有一列自增INT做主键,但是该ID值达到了INT最大值的话,MyISAM、MEMORY、InnoDB三种引擎的告警信息是不一样的.

InnoDB引擎的告警信息类似这样:

参考

查看是否己修改

二.硬盘空间满了,清理硬盘即可.

以上就是土嘎嘎小编为大家整理的MySQL 出现 The table is full 的解决方法【转】相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章