mysql> show variables like 'innodb_temp_data_file_path';+----------------------------+-----------------------+| Variable_name | Value |+----------------------------+-----------------------+| innodb_temp_data_file_path | ibtmp1:12M:autoextend |+----------------------------+-----------------------+1 row in set (0.00 sec)
1
2
3
4
5
6
7
处理步骤
1)首先备份数据库,如果Mysql服务还能正常使用,可以用日常的备份机制做一次全备;如果Mysql服务已经异常了,可以考虑物理备份。
2)为了避免以后再次出现ibtmp1文件暴涨,限制其大小,需在配置文件加入:
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G
3)与业务各方沟通好,重启Mysql实例(重启后ibtmp1文件会自动清理)。
4)重启后,验证配置是否生效:
mysql> show variables like 'innodb_temp_data_file_path';
+----------------------------+------------------------------+
| Variable_name | Value |
+----------------------------+------------------------------+
| innodb_temp_data_file_path | ibtmp1:12M:autoextend:max:5G |
+----------------------------+------------------------------+
1 row in set (0.01 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
这样配置以后,就不用担心ibtmp1文件会暴涨占满磁盘空间了。
三、总结
可能导致ibtmp1文件会暴涨的情况:
1.用到临时表,当EXPLAIN 查看执行计划结果的 Extra 列中,如果包含 Using Temporary就表示会用到临时表。
2.GROUP BY无索引字段或GROUP BY + ORDER BY的子句字段不一样时。
3.order by与distinct共用,其中distinct与order by里的字段不一致(主键字段除外)。
4.insert into table1 select xxx from table2。