Can't create/write to file '/tmp/*******.MYI'が発生した
MySQLを使ってデータ投入するとあるバッチ処理を実行すると、唐突に以下のエラーが発生しました。
SQL Error: 1030: Got error -1 from storage engine SQL Error: 126: Incorrect key file for table '/tmp/#sql_6b19_0.MYI'; try to repair it SQL Error: 1: Can't create/write to file '/tmp/#sql_6b19_0.MYI' (Errcode: 17) SQL Error: 1: Can't create/write to file '/tmp/#sql_6b19_0.MYI' (Errcode: 17) SQL Error: 1: Can't create/write to file '/tmp/#sql_6b19_0.MYI' (Errcode: 17) SQL Error: 1: Can't create/write to file '/tmp/#sql_6b19_0.MYI' (Errcode: 17) SQL Error: 1: Can't create/write to file '/tmp/#sql_6b19_0.MYI' (Errcode: 17) SQL Error: 1: Can't create/write to file '/tmp/#sql_6b19_0.MYI' (Errcode: 17)
初めて見たエラーなので調べて見たところ、MySQLのマニュアルからMySQLが特定のテンポラリディレクトリに結果セット用のテンポラリファイルを作成できないことを意味していることが分かりました。
実際に調べて見ると...
$ df -m Filesystem 1M-blocks Used Available Use% Mounted on /dev/mapper/VolGroup00-LogVol00 8804 8350 0 100% / /dev/sda1 99 18 77 19% /boot tmpfs 506 0 506 0% /dev/shm
あっ、まったくその通りでした。VMWare上で動かしているサーバなので、ディスクが少ししか割り当ててなかったために発生していただけでした。
不要なファイルを削除し、念のためテーブルのチェック、最適化、そして分析を行っておきます。
$ mysqlcheck -u root -p -a -o -A
最後にmysqldを再起動します。
$ sudo /etc/init.d/mysql restart