まとまりのないブログ

something which something is something

mysql

mysqlのテーブルのクラッシュ

投稿日:


/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'

-mysql
-

執筆者:


comment

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

no image

SQL_CALC_FOUND_ROWSの効果

mysqlでは行数のカウントをするのにSQL_CALC_FOUND_ROWSというのを使うことができるようだが、where句に条件を指定した場合だとcount(*)でレコードをカウントする場合と大差な …

no image

Incorrect key file for table ‘./my/table.MYI’; try to repair it

MySQLのテーブルが壊れた。Incorrect keyとかCorruptとかエラーメッセージが出たのでrepairテーブルとかmyisamchkとか色々修復するべく試したがどうやっても直ってくれない …

no image

古いMySQLをインストールした時にlibncursesw.so.5がないと怒られた

MySQL5.087をインストールしてデーモン起動してログインしようとしたら # ./bin/mysql -u mysql ./bin/mysql: error while loading share …

no image

mariadbのポートを変更する

mariadbのコンフィグファイルであるmy.cnfにポートの設定を追加する。mysqldセクションとportを下記のように追加して再起動する。そしてmysqlにログインして show variabl …

no image

mroongaよりsennaの方が検索速度が速い場合がある

DBのレコード件数1800~2000万件程度のテーブルで全文検索した場合に、mroongaを使って検索した時にやたら時間がかかった。大体3秒~10秒ほどselect count(*)を実行するのにかか …