RDS for MySQL 错误 the table '/home/mysql/xxxx/xxxx/#tab_name' is full 的原因和处理

RDS for MySQL 错误 the table '/home/mysql/xxxx/xxxx/#tab_name' is full 的原因和处理

 

1. 出现这个错误信息的原因

2. 如何处理该错误信息

3. 如何判断查询是否使用内部临时表



在使用 RDS 的过程中,有时会碰到下面的出错信息:

the table ‘/home/mysql/xxxx/xxxx/#tab_name’ is full,比如:

the table ‘/home/mysql/data3077/tmp/#sql_19472_5’ is full

 

1. 出现这个错误信息的原因

在SQL查询进行 group by、order by、distinct、union、多表更新、group_concat、count(distinct)、子查询或表连接的情况下,MySQL 有可能会使用内部临时表。MySQL 首先在内存中创建 Memory 引擎临时表,当临时表的尺寸过大时,会自动转换为磁盘上的 MyISAM 引擎临时表(当查询涉及到 Blob 或 Text 类型字段,MySQL 会直接使用磁盘临时表)。

这个错误信息,说明磁盘上的临时表 #sql_19472_5 的物理尺寸受到限制,已经无法再继续扩展了。

导致这个错误信息的原因是查询语句使用的内部磁盘临时表(MyISAM 引擎表)总大小已经达到了实例参数 loose_rds_max_tmp_disk_space 指定的限制(默认 10 GB)。

2. 如何处理该错误信息

  • 在控制台  参数设置中根据 RDS 实例当前空闲空间应用空间使用情况,调高参数 loose_rds_max_tmp_disk_space 的设置,建议考虑设置为略小于当前空闲空间(保留一部分空间以便 Binlog 和 数据文件使用),以避免磁盘临时表总占用空间过高,超过实例规格而导致实例锁定,影响业务。该参数单位是 字节(Byte),默认 10 GB,上限 100 GB。

  • 减少同时使用磁盘临时表的会话数量。因为参数 loose_rds_max_tmp_disk_space 指定的是磁盘临时表文件的总大小,因此减少并发使用磁盘临时表的会话数量可以避免超过该参数指定的限制。

        可以通过在控制台  参数设置 中调高 tmp_table_size 参数值来调高内存临时表的上限。

注:tmp_table_size 单位字节(Byte),默认 256 KB,最大64 MB。

  • 在查询中,尽量避免使用 Blog 和 Text 类型字段。
  • 优化查询逻辑,避免过大的中间数据集操作。

3. 如何判断查询是否使用内部临时表

查看 explain SQL 命令的输出,在 Extra 字段中有 Using temporary 字样的代表会使用内部临时表。比如:

select * from alarm group by created_on order by default;

 

时间: 2025-01-26 12:02:13

RDS for MySQL 错误 the table '/home/mysql/xxxx/xxxx/#tab_name' is full 的原因和处理的相关文章

python连接mysql错误:Cant connect to MySQL server on 127.0.0.1

python做了一个程序,需要频繁读取数据并写入数据. 运行了几天后发现每次运行几个小时后都会出现mysql链接错误,关键错误信息如下: 2003, "Can't connect to MySQL server on '127.0.0.1' (10048) 看了一些资料,mysql的10048错误是因为端口不够用,不能建立新的链接!问题是原来的链接我已经关闭了啊!最关键的在于:关闭的链接,其端口不是立即可用的,windows默认的端口周期是240秒. 解决办法,从两方面下手: 1.增加可用端口

MySQL错误日志总结

MySQL错误日志是记录MySQL 运行过程中较为严重的警告和错误信息,以及MySQL每次启动和关闭的详细信息.错误日志的命名通常为hostname.err.其中,hostname表示服务器主机名. The error log contains information indicating when mysqld was started and stopped and also any critical errors that occur while the server is running.

解决MySql error #1036 Table is read only 错误方法

这次网站搬家采用直接打包mysql数据库和网页文件的形式进行迁移,上传好mysql data目录里面的网站数据库至VPS上mysql存放数据库的目录里面,解压就行.我的VPS存放数据库的路径是 /usr/local/mysql/var. 上传好网站数据,解压,配置好数据库链接参数就行,网站就能正常连接上了,我本以为这已经是顺利迁移完成了,但后来操作的时候,发现只能读取数据库的内容,不能更改写入任何信息,提示#1036 – Table '* ' is read only (*号为任意表),也就是说

MYSQL错误:Can’t open file: ‘×××.MYI’ (errno: 145)

这个错误是典型的mysql表受损造成的,解决的办法就是修复表,这个问题也是mysql经常容易出现的,mysql表和索引损坏的几率很大,但是修复也很方便,减少此类问题发生的办法就是尽量减少服务器无故断电,关闭服务器时,最后先手动关闭mysql数据库. 下面看看这个问题: Can't open file: '×××.MYI' (errno: 145),这个错误一般就是你的数据库表文件损坏造成的,造成的原因大概是你把数据库文件挪来挪去的结果,当然不排除其他原因啊. 具体数据库出现错误的提示代码是: I

MySQL中create table语句的基本语法是_php基础

MySQL中create table语句的基本语法是:  Create [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]  [table_options] [select_statement]  TEMPORARY:该关键字表示用create table新建的表为临时表,此表在当前会话结束后将自动消失.临时表主要被应用于存储过程中,对于目前尚不支持存储过程的MySQL,该关键字一般不用.  IF NOT EX

mysql错误解决总结

1. MySQL错误日志里出现: 140331 10:08:18 [ERROR] Error reading master configuration 140331 10:08:18 [ERROR] Failed to initialize the master info structure 140331 10:08:18 [Note] Event Scheduler: Loaded 0 events   从错误提示就可以看出和mster info相关,找到数据目录下的master.info文件

MYSQL错误:Can’t open file: ‘×××.MYI’ (errno: 145)修复方法_Mysql

减少此类问题发生的办法就是尽量减少服务器无故断电,关闭服务器时,最后先手动关闭mysql数据库. 下面看看这个问题: Can't open file: '×××.MYI' (errno: 145),这个错误一般就是你的数据库表文件损坏造成的,造成的原因大概是你把数据库文件挪来挪去的结果,当然不排除其他原因啊. 具体数据库出现错误的提示代码是: Invalid SQL: -- MySQL 错误!: 1016 (Can't open file: '×××.MYI' (errno: 145)) 解决这

MySQL进阶_create table篇

MySQL中create table语句的基本语法是: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement] TEMPORARY:该关键字表示用create table新建的表为临时表,此表在当前会话结束后将自动消失.临时表主要被应用于存储过程中,对于目前尚不支持存储过程的MySQL,该关键字一般不用.IF NOT EXISTS:

mysql错误处理之ERROR 1786 (HY000)_Mysql

ERROR 1786 (HY000) [环境描述] msyql5.6.14 [报错信息] 执行create table ... select的时候遇到报错: 复制代码 代码如下: db1 [test] [23:01:58]> create tablelgmnr_bak select * from lgmnr; ERROR 1786 (HY000): CREATE TABLE ... SELECTis forbidden when @@GLOBAL.ENFORCE_GTID_CONSISTENCY