MySQLの「Can’t create/write to file ‘/tmp/#sql****.MYI’」エラーを解決する!
「急いで解決法を教えてくれ!」という人がほとんどでしょうから、まずは結論から。
/tmp/ ディレクトリ内を圧迫している余計なファイルをすぐに削除してください!
特にサイズが大きい画像ファイルなどがあればすぐに!
終わりましたか? まだ直らない? では今度は以下の手順を踏んでみてください。
- 1. /home/ に tmp ディレクトリを作成。
- 2.tmp ディレクトリのパーミッションを「777」に。
- 3./etc/my.cnf を編集。
- 4.tmpdir = /home/tmp の記述を追加。
- 5.MySQLサーバを再起動。
しばらく動いたけど、また同じエラー? では…
今度はサーバー内にどんどん増えていってるファイル、あるいは既にたくさんある余分なファイルを削除してください!
/tmp/ の容量制限とi-nodeの制限
解決したでしょうか? 一安心。。
どういうことが起こったかというと、MySQLが処理のために一時的にファイルを作成できなくなったことによるエラーなんですね。
MySQLでは特に指定していなければ、一時ディレクトリを「/tmp/」に設定します。 ここの容量制限に引っかかってしまうとエラーが起こります。
もう一つは、ディスク内にファイルを作成できる上限数に達してしまうことが考えられます。 この場合はdfコマンドに「hi」オプションを付けて実行することでinode数を確認できます。
# df -hi Filesystem Inodes IUsed IFree IUse% Mounted on /dev/vzfs 245K 245K 0 100% / none 128K 97 128K 1% /dev
これを見ると、245,000ファイルの上限に達してしまって、これ以上ファイルを作成できないことが分かります。 こうなるとMySQLだけの問題ではなく、サーバーログが残せないなど、あらゆるところに不具合が出る恐れがあります。
あまりファイルを作りすぎるプログラムを書かないように注意しましょうね!
2011-04-13