资讯专栏INFORMATION COLUMN

处理常见异常MySQL table xxx is full 不常见原因一例

IT那活儿 / 3983人阅读
处理常见异常MySQL table xxx is full 不常见原因一例
 背 景

在某日常爱岗敬业过程中,忽然收到某业务不可用,数据无法插入修改的消息,迅速打开错误日志发现大量业务表报table XXX is full的错误:

看到此报错心里有数,mysql出现"the table is full"的问题,一般有两个常见原因:

  • 一个是使用MEMORY 存储引擎时临时表大小设置太小导致,一般调整MySQL的配置文件两个参数重启即可:
    tmp_table_size
    max_heap_table_size

    但是看报错日志中显然很多业务表都不是memory存储引擎而是innodb存储引擎的,故排除此原因。

  • 另一种原因便是硬盘空间满了,清理硬盘即可。但是检查数据目录空间发现还有大量磁盘空间可用:


 处 理

两个常见原因皆排除后,感受到时间紧迫,迅速查阅官方文档检索是否有其他原因可能性:

可以看出除了 ①磁盘空间满;②超过文件系统限制;③超过innodb单表表空间限制之外,其余全是关于MyISAM存储引擎和memory存储引擎引起的原因。显然这些都不符合我们现场的情况。

气氛变得紧张起来,怀疑有更深的原因和bug,迅速上MOS查询相关问题,终于发现类似问题的doc:

文档提示当磁盘空间还有较大盈余的时候,可能是ibdata1系统表空间文件无法继续扩展导致,此时无论是因为设置原因还是文件系统限制原因都会在SQL层抛出the table XXX is full的异常,遂马上检查ibdata1文件:

发现系统表空间文件ibdata2 已经5G  ,达到最大限制了,迅速另行添加一个新的共享表空间文件,使数据库恢复正常。


 总 结

Ibdata1系统表空间在设置了innodb_file_per_table(建议设置)的情况下会储存innodb表的元数据、change buffer、doublewrite buffer和undo log,如果多带带设置undo表空间的话,存储内容会更少,出现问题的频率也很低,所以平时运维极易忽略ibdata1,在巡检时也应添加上对该表空间的检查,自动扩展的值也应依据业务进行合理设置。

参考文档:

  • https://dev.mysql.com/doc/refman/5.7/en/full-table.html
  • https://dev.mysql.com/doc/refman/5.7/en/table-size-limit.html
  • mysqld is showing a "table foo is full" error but there is plenty of available disk space (Doc ID 1458445.1)
  • Table is Full Error for InnoDB Tables (Doc ID 1356573.1)
  • https://dev.mysql.com/doc/refman/5.7/en/innodb-system-tablespace.html


END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129893.html

相关文章

  • MySQL常见错误分析与解决方法总结

    摘要:常见错误分析与解决方法总结一翻译不能连接到上的分析这说明计算机是存在的,但在这台机器上却没提供服务。解决同样对症下药,不同的原因不同的处理方法。九翻译有一个语法错误在你的中分析论坛标准的程序是没有语法错误的。表名,可以暂时解决问题。MySQL常见错误分析与解决方法总结 一、Cant connect to MySQL server on localhost (10061)翻译:不能连接到 ...

    番茄西红柿 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<