几天前,我们遇到了
MySQL安装的一些严重问题:
MySQL不断打开临时文件(正常行为)但这些文件从未发布过.结果是,最终磁盘空间耗尽,我们必须重新启动服务并手动清理/ tmp.
使用lsof,我们看到这样的事情:
mysqld 16866 mysql 5u REG 8,3 0 692 /tmp/ibyWJylQ (deleted)
mysqld 16866 mysql 6u REG 8,3 0 707 /tmp/ibf5adsT (deleted)
mysqld 16866 mysql 7u REG 8,3 0 728 /tmp/ibGjPRyW (deleted)
mysqld 16866 mysql 8u REG 8,3 0 5678 /tmp/ibMQDLMZ (deleted)
mysqld 16866 mysql 13u REG 8,3 0 5679 /tmp/ibQAnM42 (deleted)
也许它没有关系,但是当我们关闭服务器时,文件最终被释放,我们可以在MySQL日志中看到以下警告:
121029 7:44:27 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 1333 user: 'xxx'
121029 7:44:27 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 1156 user: 'yyy'
121029 7:44:27 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 1151 user: 'zzz'
其中’xxx’,’yyy’和’zzz’是不同的mysql用户(以及只有3个与数据库有活动连接的用户).
我们有一些理论:
>操作系统出现问题,导致文件处理程序保持打开状态. OS“删除”操作是否有可能阻塞线程直到关闭?这可以解释关闭时的警告以及在进程终止时最终删除文件的事实.
>到目前为止,数据集非常小,临时文件相对较小,并且有足够的时间释放文件句柄而不会耗尽磁盘空间.
我们在RHEL 6.2上使用Mysql 5.5和默认内核.