安全なデータベース管理の鍵は定期的にバックアップを取る事です。
InnoDB Hot Backup は InnoDB
データベースが起動している最中にバックアップを取る事ができるオンライン
バックアップ ツールです。InnoDB Hot
Backup
はデータベースをシャットダウンする必要が無く、ロックの設定も無く、通常のデータベースの処理を邪魔する事もありません。InnoDB
Hot Backup は MySQL
サーバが起動するコンピュータごとに、年間ライセンス料が
€390掛かる、無料ではない(商業用)アドオン
ツールです。詳細情報とスクリーンショットに関しては
InnoDB Hot
Backup home page を参照してください。
もし MySQL
サーバをシャットダウンする事ができるなら、テーブルを管理する為に
InnoDB
によって利用される全てのファイルで構成されているバイナリ
バックアップを作成する事ができます。次の手順に従って下さい:
MySQL サーバをシャットダウンし、エラーが発生していない事を確認してください。
全てのデータ ファイルを(ibdata
ファイルと .ibd
ファイル)
安全な場所にコピーしてください。
全ての ib_logfile
ファイルを安全な場所にコピーしてください。
my.cnf
設定ファイルを安全な場所にコピーしてください。
InnoDB
テーブルの全ての
.frm
ファイルを安全な場所にコピーしてください。
複製は InnoDB
テーブルと共に機能するので、ハイ
アベイラビリティを必要とするデータベース
サイトにデータベースのコピーを保管する為に、MySQL
複製性能を利用する事ができます。
今説明したようにバイナリ
バックアップを作成する事に追加して、mysqldump
を利用してテーブルのダンプを定期的に作成する必要があります。これは、バイナリ
ファイルは気づかない内に破損する事があるからです。ダンプされたテーブルは人間が解読可能なテキスト
ファイル内に格納されるので、テーブルの破損を見つける事は簡単になります。また、フォーマットが単純な為、深刻なデータ破損の可能性は小さいです。mysqldump
は、別のクライアントをロックアウトせずに一貫性のあるスナップショットを作る為に利用できる
--single-transaction
オプションも持ちます
InnoDB
データベースを今説明したばかりのバイナリ
バックアップから現在まで復旧できるようにする為には、バイナリ
ログがオンの状態で MySQL
サーバを起動させる必要があります。すると、ポイント
イン タイムの復旧を達成する為にバックアップ
データベースにバイナリ
ログを適応する事ができます:
mysqlbinlog yourhostname
-bin.123 | mysql
MySQL
サーバのクラッシュから復旧する為のたった一つの要求事項は、再起動させる事です。InnoDB
は自動的にログを確認し、データベースの前進を現在まで実行します。InnoDB
はクラッシュした時に存在していなかった、コミットされていないトランザクションを自動的にロールバックします。復旧の最中に、mysqld
は次のようなアウトプットを表示します:
InnoDB: Database was not shut down normally. InnoDB: Starting recovery from log files... InnoDB: Starting log scan based on checkpoint at InnoDB: log sequence number 0 13674004 InnoDB: Doing recovery: scanned up to log sequence number 0 13739520 InnoDB: Doing recovery: scanned up to log sequence number 0 13805056 InnoDB: Doing recovery: scanned up to log sequence number 0 13870592 InnoDB: Doing recovery: scanned up to log sequence number 0 13936128 ... InnoDB: Doing recovery: scanned up to log sequence number 0 20555264 InnoDB: Doing recovery: scanned up to log sequence number 0 20620800 InnoDB: Doing recovery: scanned up to log sequence number 0 20664692 InnoDB: 1 uncommitted transaction(s) which must be rolled back InnoDB: Starting rollback of uncommitted transactions InnoDB: Rolling back trx no 16745 InnoDB: Rolling back of trx no 16745 completed InnoDB: Rollback of uncommitted transactions completed InnoDB: Starting an apply batch of log records to the database... InnoDB: Apply batch completed InnoDB: Started mysqld: ready for connections
もしデータベースが破損したり、ディスクが失敗したら、バックアップから復旧作業を行う必要があります。破損が起きた場合、まず最初に破損されていないバックアップを見つけなければいけません。ベース バックアップを復旧した後、バックアップが作成された後に実行された変更を格納する為に、mysqlbinlog と mysql を利用してバイナリ ログ ファイルから復旧を行ってください。
場合によっては、1つか複数の破損したテーブルをダンプ、ドロップ、または再作成するだけで充分な事も有ります。もちろん
CHECK TABLE
が全ての破損を検出する事はできませんが、テーブルが破損したかどうかを確認する為に
CHECK TABLE
SQL
ステートメントを利用する事ができます。テーブルスペース
ファイル内のファイル領域管理のインテグリティを確認する為に、innodb_tablespace_monitor
を利用する事ができます。
場合によっては、明白なデータベース ページの破損は、OSがそれ自体のファイル キャッシュを破損している為に起きていて、ディスク上のデータは無傷な事があります。まず最初にコンピュータを再起動するのが一番良いでしょう。それを行う事で、データベース破損のように見えていたエラーを排除する事ができます。