myisamchk: error: myisam_sort_buffer_size is too small

myisamchkを実行したときに

myisamchk: error: myisam_sort_buffer_size is too small
Try fixing it by using the –safe-recover (-o), the –force (-f) option or by not using the –quick (-q) flag

というエラーが発生してテーブルの修復が完了することができなかった。サイズが小さすぎる、デフォルトではたしか64M程度ということなので、それでは大きめにメモリサイズを指定して実行してみたところ、

cdn-project:/usr/local/mysql# ./bin/myisamchk -r –myisam_sort_buffer_size=2024M ./data/auc/aucTable.MYI
./bin/myisamchk: unknown variable ‘myisam_sort_buffer_size=2024M’

そんな変数は知らないということらしい。それはないだろう・・・。myisam_sort_buffer_sizeの変わりにsort_buffer_sizeを指定することにした。

cdn-project:/usr/local/mysql# ./bin/myisamchk -r –sort_buffer_size=2024M ./data/auc/aucTable.MYI
– recovering (with sort) MyISAM-table ‘./data/auc/aucTable.MYI’
Data records: 0
– Fixing index 1
Wrong bytesec: 169-186-231 at 3476352160; Skipped
Wrong bytesec: 169-186-231 at 3476352160; Skipped
– Fixing index 2
Data records: 49302846

sort_buffer_sizeを2GB指定して修復を実行したらとりあえずは完了した。mysqlのデーモンを起動したら問題なく動作するようになった。起動後に一応テーブルのチェックをしてみる。

mysql> check table aucTable;

+————–+——-+———-+———-+
| Table | Op | Msg_type | Msg_text |
+————–+——-+———-+———-+
| auc.aucTable | check | status | OK |
+————–+——-+———-+———-+
1 row in set (8 min 36.97 sec)

問題なし。テーブルの最適化ということができるらしいので気休めにやっておく。

mysql> optimize table aucTable;
+————–+———-+———-+———-+
| Table | Op | Msg_type | Msg_text |
+————–+———-+———-+———-+
| auc.aucTable | optimize | status | OK |
+————–+———-+———-+———-+
1 row in set (19 min 21.08 sec)

最適かされたのかされていないのか不明。

コメントを残す

メールアドレスが公開されることはありません。