mysql执行SQL语句时报错:[Err] 3 - Error writing file '/tmp/MYP0G1B8' (Errcode: 28 - No space left on device)
问题描述:
今天一同事在mysql中执行SQL语句的时候,报了/tmp空间不足的问题,报错如下:
[SQL] SELECT f.prov as 字段1, MAX( CASE f.flag_name WHEN '字段1' THEN f.num ELSE 0 END ) AS '字段1', MAX( CASE f.flag_name WHEN '店员量' THEN f.num ELSE 0 END ) AS '字段1', MAX( CASE f.flag_name WHEN '字段1' THEN f.num ELSE 0 END ) AS '字段1' FROM
( SELECT '字段1' AS flag_name, ( SELECT b.AREA_NAME FROM sc_area b WHERE b.AREA_CODE = a.privinceCode ) AS prov, COUNT(DISTINCT a.storeID) AS num FROM promotion a WHERE DATE_FORMAT(a.pushTime, '%Y') = '2018'GROUP BY a.privinceCode
UNION ALL SELECT '字段1' AS flag_name, ( SELECT b.AREA_NAME FROM sc_area b WHERE b.AREA_CODE = a.privinceCode ) AS prov, COUNT(DISTINCT a.staffID) AS num FROM promotion a WHERE DATE_FORMAT(a.pushTime, '%Y') = '2018' GROUP BY a.privinceCode
UNION ALL SELECT '字段1' AS flag_name, ( SELECT b.AREA_NAME FROM sc_area b WHERE b.AREA_CODE = a.privinceCode ) AS prov, COUNT(1) AS num FROM promotion a WHERE DATE_FORMAT(a.pushTime, '%Y') = '2018' AND a.pushSts = '1' GROUP BY a.privinceCode
) AS f GROUP BY f.prov ;
[Err] 3 - Error writing file '/tmp/MYP0G1B8' (Errcode: 28 - No space left on device)
故障分析:
通过以上的错误提示,可以知道是在执行SQL的时候,创建临时表进行排序的时候,/tmp空间不足导致的.
故障处理:
1.查看磁盘上tmp空间大小,发现/tmp空间剩余5.2GB
2.与同事沟通,SQL查询的表非常的打,有8G大小,所以明显是tmp空间大小不够用了
3.无法扩展/tmp的大小,所以就修改mysql中tmpdir的位置,由于该参数是只读参数,只能在my.cnf中修改,重启生效
4.创建临时目录,并且修改权限
[root@testvm mnt]# mkdir mysql_tmp_dir
[root@testvm mnt]# ls
mysql_tmp_dir
[root@testvm mnt]# chmod mysql_tmp_dir/ #必须修改权限,让启动mysql的账户是可读写的. 此处是在root下创建,也可以切换到mysql用户下,然后创建目录,这样默认mysql就有读写权限了.
[root@testvm mnt]# ls -ltr
total
drwxrwxrwx root root Jul : mysql_tmp_dir
5.修改my.cnf
tmpdir = /mnt/mysql_tmp_dir
6.重启mysql实例
7.查看tmpdir变量值
mysql> show variables like '%tmpdir%';
+-------------------+--------------------+
| Variable_name | Value |
+-------------------+--------------------+
| innodb_tmpdir | |
| slave_load_tmpdir | /mnt/mysql_tmp_dir |
| tmpdir | /mnt/mysql_tmp_dir |
+-------------------+--------------------+
3 rows in set (0.01 sec)
备注:tmpdir变量已经修改生效了,后续执行SQL过程中生成的临时文件都会存储在这个目录下了.
tmpdir系统变量,官方文档参考:

The path of the directory to use for creating temporary files. It might be useful if your default /tmp directory resides on a partition
that is too small to hold temporary tables. This option accepts several paths that are used in round-robin fashion. Paths should be
separated by colon characters (:) on Unix and semicolon characters (;) on Windows. If the MySQL server is acting as a replication slave,
you should not set --tmpdir to point to a directory on a memory-based file system or to a directory that is cleared when the server host
restarts. For more information about the storage location of temporary files, see Section B.5.3.5, “Where MySQL Stores Temporary Files”.
A replication slave needs some of its temporary files to survive a machine restart so that it can replicate temporary tables or LOAD DATA
INFILE operations. If files in the temporary file directory are lost when the server restarts, replication fails.
文档创建时间:2018年7月5日17:53:46
mysql执行SQL语句时报错:[Err] 3 - Error writing file '/tmp/MYP0G1B8' (Errcode: 28 - No space left on device)的更多相关文章
- mysql5.7执行sql语句报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonagg
mysql5.7执行sql语句报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonagg ...
- 不登录到MySQL执行SQL语句
mysql -e 不登录到MySQL执行SQL语句 mysql -u root -p -e "SHOW DATABASES"
- iozone测试报错:Error writing block 12634, fd= 3 write: No space left on device
问题:使用iozone测试GFS的读写性能的时候,一直报错Error writing block 12634, fd= 3 write: No space left on device,百思不得其解: ...
- MySQL Crash Errcode: 28 - No space left on device
一台MySQL服务器突然Crash了,检查进程 ps -ef | grep -i mysql 发现mysqld进程已经没有了, 检查错误日志时发现MySQL确实Crash了.具体如下所示: 注意日志中 ...
- 解决Mysql搭建成功后执行sql语句报错以及区分大小写问题
刚搭建完mysql 8.0以后会: 一.表区分大小写, 二.执行正确的sql语句成功且会报:[Err] 1055 - Expression #1 of ORDER BY clause is not i ...
- mysql执行sql语句过程
开发人员基本都知道,我们的数据存在数据库中(目前最多的是mysql和oracle,由于作者更擅长mysql,所以这里默认数据库为mysql),服务器通过sql语句将查询数据的请求传入到mysql数据库 ...
- 使用Mysql执行SQL语句基础操作
SQL: 又叫结构化语言,是一种用来操作RDBMS的数据库语言,在关系型数据库中都支持使用SQL语句,如oracle.mysql等等. 注意: 在关系型数据库中sql语句是通用的,而在非关系型数据库 ...
- mysql 执行 sql 语句提示Parameter '@XXX' must be defined
执行 sql 语句 MySqlException: Parameter '@maxNo' must be defined. 执行 sql 中含有自定义变量 @maxNo,抛出异常 解决方法: 连接字符 ...
- mysql 执行sql语句执行问题
SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL ...
随机推荐
- Python对字典(directory)按key和value排序
distance = {9149: 0, 9150: 26, 9151: 24, 9152: 24, 9153: 24, 9154: 27, 9155: 25, 9156: 30, 9158: 20, ...
- Tomcat性能优化(二) ExpiresFilter设置浏览器缓存
Tomcat性能调优 通过ExpiresFilter设置资源缓存 [官方文档] http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#E ...
- hive中窗口分析函数
分组统计 1. groups sets(field1,field2,field3, (field1,field2)) 样例如下: select dt,tenantCode,nvl(platform,' ...
- Oracel扩展表空间
--表空间查看 SELECT tbs, sum(totalM) as total, sum(usedM) as UserdM, sum(remainedM) as remainedM, as User ...
- Redis有序集合
Redis有序集合类似Redis集合存储在设定值唯一性.不同的是,一个有序集合的每个成员带有分数,用于以便采取有序set命令,从最小的到最大的分数有关. Redis 有序set添加,删除和测试中的O( ...
- Web API设计方法论
英文原文:A Web API Design Methodology 为Web设计.实现和维护API不仅仅是一项挑战:对很多公司来说,这是一项势在必行的任务.本系列将带领读者走过一段旅程,从为API确定 ...
- SpringMVC接受JSON参数详解及常见错误总结
SpringMVC接受JSON参数详解及常见错误总结 SpringMVC接受JSON参数详解及常见错误总结 最近一段时间不想使用Session了,想感受一下Token这样比较安全,稳健的方式,顺便写一 ...
- R语言:读取数据
主要学习如何把几种常用的数据格式导入到R中进行处理,并简单介绍如何把R中的数据保存为R数据格式和csv文件. 1.保存和加载R的数据(与R.data的交互:save()函数和load()函数)a &l ...
- 【转】MySQL分库分表数据迁移工具的设计与实现
一.背景 MySQL作为最流行的关系型数据库产品之一,当数据规模增大遭遇性能瓶颈时,最容易想到的解决方案就是分库分表.无论是进行水平拆分还是垂直拆分,第一步必然需要数据迁移与同步.由此可以衍生出一系列 ...
- C++头文件的工作原理
一.C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C+ ...