もしデータベース
ページが破損したら、SELECT INTO
OUTFILE
を利用してデータベースからテーブルをダンプしたいかもしれません。通常、この方法で取得されたデータは無傷です。そうだとしても、破損によって
SELECT * FROM
ステートメントや tbl_name
InnoDB
バックグラウンド操作がクラッシュしたりアサートしたり、または
InnoDB
前進復旧がクラッシュしたり、という事が起こります。
しかし、バックグラウンドの操作を防いでいる間に、テーブルをダンプする事ができるように
InnoDB
ストレージ
エンジンの起動を強制する事ができます。例えば、サーバを再起動する前に、オプション
ファイルの [mysqld]
セクションに次のラインを追加する事ができます:
[mysqld] innodb_force_recovery = 4
innodb_force_recovery
のゼロではない許容値が続きます。大きい数字は小さい数字の全ての予防策を含んでいます。もし最大4のオプション値を利用してテーブルをダンプする事ができれば、破損した独立ページ上のいくつかのデータが失われるだけなので、比較的に安全です。データベース
ページは既に廃止された状態で残されるので、6の値はさらに徹底的であり、Bツリーやその他のデータベース構造に更なる破損を引き起こす可能性があります。
1
(SRV_FORCE_IGNORE_CORRUPT
)
破損ページを検出したとしてもサーバを起動させてください。テーブルをダンプする助けになるので、SELECT
* FROM
が破損したインデックス
レコードとページを飛び越えるようにして下さい。
tbl_name
2
(SRV_FORCE_NO_BACKGROUND
)
主スレッドが起動するのを防いで下さい。もし消去操作の最中にクラッシュが起きそうであれば、この復旧値はそれを防ぎます。
3
(SRV_FORCE_NO_TRX_UNDO
)
復旧後にトランザクション ロールバックを起動しないでください。
4
(SRV_FORCE_NO_IBUF_MERGE
)
挿入バッファ マージ操作も避けてください。もしそれらがクラッシュしそうであれば、行わないでください。テーブル統計を計算しないでください。
5
(SRV_FORCE_NO_UNDO_LOG_SCAN
)
データベースを起動する時に取り消しログを見ないで下さい:InnoDB
は不完全なトランザクションもコミットしたように扱います。
6
(SRV_FORCE_NO_LOG_REDO
)
復旧と共にログ前進を接続内で行わないでください。
それらをダンプする為にテーブルから
SELECT
する事ができ、または強制復旧が利用されたとしてもテーブルを
DROP
か CREATE
する事ができます。もし与えられたテーブルがロールバック上でクラッシュを引き起こしていると知ったら、それをドロップする事ができます。大量の失敗インポートや
ALTER TABLE
によって引き起こされた暴走ロールバックを停止する為にもこれを利用する事ができます。ロールバックせずにデータベースを立ち上げる為に
mysqld
処理を停止し、innodb_force_recovery
を 3
に設定し、そして暴走ロールバックを引き起こしているテーブルを
DROP
する事ができます。
データベースはそれ以外の場合にゼロ以外の値の
innodb_force_recovery
と共に利用するべきではありません
。innodb_force_recovery
が0よりも大きい場合、安全の為、InnoDB
はユーザがINSERT
、UPDATE
、または
DELETE
操作を行うのを防ぎます。