[MySQL FAQ]系列 — 你所不知的table is full那些事

简介: [MySQL FAQ]系列 — 你所不知的table is full那些事

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

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

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

有可能是数据库文件超过操作系统层的文件大小限制,比如fat/fat32以及低版本的Linux,文件最大不可以大于2G(最大扩展到4G),这就需要转换fat32为NTFS,或升级Linux版本。

2、确认磁盘空间没有满

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

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

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

如果该进程不能被杀掉,例如是 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;

备注:MySQL 5.5开始才支持 BINARY/ENGINE/ERROR/GENERAL/RELAY/SLOW 等关键字,之前的版本只能刷新全部日志。

3、确认数据表状态

  • 如果是MyISAM引擎

默认配置下,MyISAM引擎最大可支持256TB(myisam_data_pointer_size = 6,256^6 = 256TB),除非操作系统层有限制。

在MySQL5.0中,MyISAM引擎行记录默认是动态长度,单表最大可达256TB,MyISAM行指针(myisam_data_pointer_size)长度为6字节。

在这之前,MyISAM行指针默认长度为4字节,只支持4GB的数据。改行指针最大值可设为8字节。

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

ALTER TABLE `xx` ENGINE=MyISAM MAX_ROWS=nn

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

  • 如果是InnoDB引擎

ibdata*共享表空间最后一个文件没有设置成自增长,或者超过32位系统的单文件大小限制。

解决方法:

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

2、检查操作系统,迁移到64位操作系统下;

3、转成独立表空间;

4、删除历史数据,重整表空间;

  • 如果是MEMORY引擎

1、适当提高max_heap_table_size设置(注意该值是会话级别,不要设置过大,例如1GB,一般不建议超过256MB);

2、执行ALTER TABLE t_mem ENGINE=MEMORY; 重整表空间,否则无法写入新数据

3、删除部分历史数据或者直接清空,重整表空间;

4、设置 big_tables = 1,将所有临时表存储在磁盘,而非内存中,缺点是如果某个SQL执行时需要用到临时表,则性能会差很多;

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

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

ERROR 1467 (HY000): Failed to read auto-increment value from storage engine

而MyISAM和MEMORY引擎则都是这样:

ERROR 1062 (23000): Duplicate entry ’4294967295′ for key ‘PRIMARY’



            </div>
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
监控 安全
安全看得见,阿里云性能监控 ARMS 全真3D拓扑实现一“屏”了然
微服务架构下,各类服务之间存在着错综复杂的依赖关系。一旦业务出现问题,追查问题源头就好比大海捞针,没有头绪。但业务不等人,此时,在最短的时间内定位问题根源是开发和运维人员对微服务监控产品的核心诉求。 传统的监控产品提供了表格(table)、表单(form)和仪表盘(dashboard)三种展现形式,因其局限性,并无法完整和直观的提供监控详情,以快速定位问题。
4305 0
|
缓存 网络协议 PHP
|
Arthas Java 测试技术
Arthas 基础教程
本场景带您体验如何在Alibaba Cloud Linux  2.1903 LTS 64位操作系统的云服务器上通过 arthas-demo 和一个 Spring Boot 应用,演示 Arthas 命令的用法。
|
传感器 存储 机器学习/深度学习
【WSN通信】基于最佳簇半径的无线传感器网络分簇路由算法附matlab代码
【WSN通信】基于最佳簇半径的无线传感器网络分簇路由算法附matlab代码
|
运维 Cloud Native 安全
招行架构师徐佳航:金融云原生与开源标准的共同生长
云原生的技术价值喻示着它就是未来,加入到一个具有可延续性生命力的开源社区,可以帮助我们更快地到达那里。——徐佳航,KubeVela Maintainer,来自招商银行基础设施研发中心云平台及运维平台开发团队。
招行架构师徐佳航:金融云原生与开源标准的共同生长
|
存储 安全 程序员
阿里 Teambition 网盘测评|免费也能快到飞起
你想要的是一款不限速、不打扰、够安全、易于协作的网盘?这些需求都会被满足,但这样还不够,要让你的每一次使用都充满惊喜和愉悦。
682 0
阿里 Teambition 网盘测评|免费也能快到飞起
|
存储 分布式计算 搜索推荐
大数据上云-HDFS数据迁移方案
大数据时代,大数据处理系统已成为各行业各类公司经营过程中不可或缺的重要生产系统之一,不管是辅助业务经营分析,为企业运营提供决策数据依据,还是进行用户行为信息分析,提供精确的用户画像,在数据计算处理(批式、流式)、查询分析都发挥着重要的作用。Hadoop 作为目前应用最为广泛的分布式大数据平台,基本都采用HDFS分布式文件系统作为整个hadoop体系的存储底座,负责数据的存储与管理。在上云过程中,阿里云提供一系列便利的迁移服务和工具来实现HDFS的数据迁移上云,用户可根据自身网络带宽情况,选择离线迁移及在线迁移两种方式进行HDFS的数据迁移。本文主要讨论在上云过程中HDFS数据迁移的方案和步骤
1135 0
大数据上云-HDFS数据迁移方案
|
人工智能 城市大脑 运维
城市大脑 | 智慧园区
本文介绍了城市大脑 | 智慧园区的方案概述,方案价值及优势以及最佳实践。
城市大脑 | 智慧园区
QGraphicsScene管理QGraphicsItem(单击/选择/移动/缩放/删除)
简述 在图形视图框架中,QGraphicsScene 提供一个快速的接口,用于管理大量 item,QGraphicsItem 是场景中 item 的基类。 图形视图提供了一些典型形状的标准 item,当然,我们也可以自定义 item。除此之外,QGraphicsItem 还支持以下特性: 鼠标按下、移动、释放和双击事件,以及鼠标悬浮事件、滚轮事件和上下文菜单事件 键盘
12177 1