まとまりのないブログ

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

mysql インデックス バックアップ

mysqlのインデックスの作成やテーブルのバックアップ方法についてのメモ。

no image

インデックス列には日本語よりも英数字を使うほうが良いのか悪いのか

テーブル内に存在するレコード数をカウントする時、where句にインデックス列を条件として指定して実行時間がどれほどかかるかテストをしてみた。テーブルの全レコード数は約1600万レコードで、カウントすべ …

no image

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 …

no image

全文検索エンジンmroongaを使ってみた

sennaをビルドして使っていたのだけれど、レコード件数と速度に限界を感じてきていたのでその後継といわれるmroonga3.04を使ってみた。使ってみた感想は、mroongaストレージエンジンでの全文 …

no image

mysqlのレプリケーションでのエラー:ERROR 1064

レプリケーションしているサーバで時々エラーが発生してスレーブ動作が止まる。よくあることと思いsql_skip_slave_counterに1を代入してエラーが発生する度に飛ばしていたのだけれど、詳しく …