数日前から、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に問題があり、ファイルハンドラーを開いたままにします。 OSの「削除」操作がシャットダウンするまでスレッドをブロックする可能性はありますか?これは、シャットダウン時の警告と、プロセスが終了するとファイルが最終的に削除されるという事実を説明している可能性があります。
これまで、データセットは非常に小さかったため、一時ファイルは比較的小さく、ディスク領域を使い果たすことなくファイルハンドルを解放するのに十分な時間がありました。
デフォルトのカーネルを使用するRHEL6.2でMysql5.5を使用しています。
ええと...それは本当に解決策ではありませんが、私はそれが研究の終わりだと思います。
MySQLのバグのようです。 このバグ の重複のようです これ
回避策として、非常に多くの一時ファイルが生成されないようにするために、binlog_cache_sizeを適切な値に増やしました(アプリケーションのベンチマークを少し行い、ファイルのサイズをlsofで確認した後)。さらに詳しく調べたい場合は、 これを解決するための他のオプションに関する記事 を見つけることができます。
それが誰かを助けることを願っています;)
参考までに、別の非常によく似たバグがあります: http://bugs.mysql.com/bug.php?id=66237 。そしてこれは5.5では修正されていないようです。