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