幾天前,我們遇到了
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和默認內核.