下午一台服务器报磁盘空间不足;通过命令 du -h --max-depth=1 / 一步步查找发现是mysql的ibtmp1文件过大导致。
ibtmp1是非压缩的innodb临时表的独立表空间,通过 innodb_temp_data_file_path 参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在支持大文件的系统这个文件大小是可以无限增长的。
临时解决方案:
重启mysql,service mysqld restart。ibtmp1文件会重新生成。
长期解决方案:
修改my.cnf配置文件,在[mysqld]下面设置innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G
ibtmp1过大的原因:
基本都是引起慢查询的因素,因此,如果遇到临时表空间文件暴涨是需要查看一下是否有大量的慢查询。
debug程序慢查询:
临时方法设置记录慢sql的查询的语句到log:SET GLOBAL slow_query_log = ON; SET long_query_time = 0.5;
show variables like 'long_query_time';
show variables like 'slow_query%';