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