開発環境のVMWareで意気揚々と5GBくらいのテーブルにALTER TABLEをしたところ、以下のエラーが出ました。
mysql> ALTER TABLE hoge ADD `foo` INTEGER AFTER bar; ERROR 1114 (HY000): The table '#sql-XXXXXX' is full
どうやらmysqlに割り当てているドライブのディスク容量がいっぱいになったようです。
まずはディスク容量を確認
# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 7.2G 3.6G 3.3G 52% / /dev/sda1 99M 19M 76M 20% /boot tmpfs 506M 0 506M 0% /dev/shm .host:/ 112G 100G 12G 90% /mnt/hgfs /dev/mapper/VolGroup00-LogVol02 9.8G 9.3G 0 100% /data
MySQL用のdataフォルダが100%に。
とりあえずmysqldumpを取ります。
# mysqldump --all-databases --single-transaction --flush-logs --quick -u root -p > /tmp/`date +%Y%m%d`.sql Enter password: mysqldump: Couldn't execute 'show fields from `hogehoge`': Got error 28 from storage engine (1030)
どうやらディスク容量がいっぱいだとshow fieldsすらエラーになる模様。
しかたがないので消せそうなファイルを消します。
# ls -lat /data/lib/mysql total 9517484 drwxr-xr-x 6 mysql mysql 4096 Oct 23 17:05 . -rw-rw---- 1 mysql mysql 25153536 Oct 23 17:05 slow_query.log -rw-rw---- 1 mysql mysql 9576960000 Oct 23 17:05 ibdata1 -rw-rw---- 1 mysql mysql 67108864 Oct 23 17:05 ib_logfile0 -rw-rw---- 1 mysql mysql 67108864 Oct 23 16:52 ib_logfile1 srwxrwxrwx 1 mysql mysql 0 Jan 18 2013 mysql.sock drwx------ 2 mysql mysql 4096 Dec 7 2012 hoge drwx------ 2 mysql mysql 4096 Dec 7 2012 mysql drwx------ 2 mysql mysql 4096 Dec 7 2012 test drwxr-xr-x 3 root root 4096 Jan 7 2011 ..
とりあえずslow_query.logをカラにします。
# cp /dev/null /data/lib/mysql/slow_query.log
改めてダンプを取った上でMySQLを停止します。
# service mysqld stop
ファイルを削除します。hogeデータベースのフォルダもバックアップを取った上で削除します。
# cd /var/lib/mysql # mv ib* /tmp # mv hoge/* /tmp/hoge # rm -R hoge
MySQLを起動します。
# service mysqld start
ダンプからリストアします。
mysql -u root -p < /tmp/`date +%Y%m%d`.sql