/usr/local/mysql/bin/myisamchk --recover --force --sort_buffer_size=2048M /usr/local/mysql/data/auc/200902.MYI
これでmysqlのテーブルがクラッシュしたのは2回目。前回は先月の中ごろだったので修復してから1ヶ月しかもたなかった。前回の修復作業はかなりの疲労を伴った。テーブルのレコード数が膨大であるためにいつ終わるのか見当もつかないから。テーブルのレコード数が4000万でそのうち4つのフィールドにインデックスが作成されている。結局、修復にかかる時間は前回の作業で20時間ほどかかった。今回はレコード数がそれより1000万増えているため、修復にかかる時間はさらに要することが予想される。
テーブルがクラッシュする原因ははっきりとはわからないが、クラッシュするなりの挿入、更新、削除のsqlを毎日数十万~数百万回実行しているという自覚はある。テーブルがクラッシュしても修復をすることができるのでそれは問題はない。問題は修復するのに時間がかかりすぎるということ。mysqlのテーブルはクラッシュするものという前提でソフトウェアを設計する必要がある。修復の時間を短縮するために1テーブル辺りのレコード数の上限を500万程度に抑えるようにして、インデックスの数も2個以内にする。それぐらいの条件であればテーブルがクラッシュしても、その修復にかかる時間は1時間程度で終わるのではないだろうか。(予想)
上限が500万レコード程度のテーブルがたくさん作成されてその全てがクラッシュしたら同じことになるんだろうか・・・。ただ、テーブルのクラッシュした結果をみたところ、一つのテーブルがクラッシュしたらその時点でmysqldはフリーズしたような状態になり、全てのデータベースのテーブルに対してsqlを受け付けないようになっていた。それでmysqlを再起動したらクラッシュしたテーブルをリペアしろエラーが表示されて、クラッシュしたテーブルはリペアしないことには使うことができず、その他のテーブルは通常通り使うことができるようになった。
しかし、関係ないはずの他のデータベース、wordpressに使っているデータベースもクラッシュしたというログがあった。なぜか。
090323 8:10:55 [ERROR] /usr/local/mysql/bin/mysqld: Table './wordpress/wp_options' is mar ked as crashed and should be repaired 090323 8:10:55 [Warning] Checking table: './wordpress/wp_options' 090323 8:10:56 [ERROR] /usr/local/mysql/bin/mysqld: Table './wordpress/wp_users' is marke d as crashed and should be repaired 090323 8:10:56 [Warning] Checking table: './wordpress/wp_users' 090323 8:10:56 [ERROR] /usr/local/mysql/bin/mysqld: Table './wordpress/wp_usermeta' is ma rked as crashed and should be repaired 090323 8:10:56 [Warning] Checking table: './wordpress/wp_usermeta' 090323 8:10:56 [ERROR] /usr/local/mysql/bin/mysqld: Table './wordpress/wp_posts' is marke d as crashed and should be repaired 090323 8:10:56 [Warning] Checking table: './wordpress/wp_posts' 090323 8:10:56 [ERROR] /usr/local/mysql/bin/mysqld: Table './wordpress/wp_terms' is marke d as crashed and should be repaired 090323 8:10:56 [Warning] Checking table: './wordpress/wp_terms' 090323 8:10:56 [ERROR] /usr/local/mysql/bin/mysqld: Table './wordpress/wp_term_taxonomy' is marked as crashed and should be repaired 090323 8:10:56 [Warning] Checking table: './wordpress/wp_term_taxonomy' 090323 8:10:56 [ERROR] /usr/local/mysql/bin/mysqld: Table './wordpress/wp_term_relationsh ips' is marked as crashed and should be repaired 090323 8:10:56 [Warning] Checking table: './wordpress/wp_term_relationships' 090323 8:10:56 [ERROR] /usr/local/mysql/bin/mysqld: Table './wordpress/wp_postmeta' is ma rked as crashed and should be repaired 090323 8:10:56 [Warning] Checking table: './wordpress/wp_postmeta' 090323 8:10:56 [ERROR] /usr/local/mysql/bin/mysqld: Table './wordpress/wp_links' is marke d as crashed and should be repaired 090323 8:10:56 [Warning] Checking table: './wordpress/wp_links'