MySQL 5.1 リファレンスマニュアル :: 13 ストレージエンジンとテーブルタイプ :: 13.5 InnoDB ストレージ エンジン :: 13.5.8 InnoDB データベースのバックアップと復旧
« 13.5.7 InnoDB データとログ ファイルの追加と削除

13.5.8.1 InnoDB 復旧の強制 »
Section Navigation      [Toggle]
  • 13.5 InnoDB ストレージ エンジン
  • 13.5.1 InnoDB 概要
  • 13.5.2 InnoDB 連絡先情報
  • 13.5.3 InnoDB 設定
  • 13.5.4 InnoDB 起動オプションとシステム変数
  • 13.5.5 InnoDB テーブルスペースを作成する
  • 13.5.6 InnoDB テーブルの作成と利用
  • 13.5.7 InnoDB データとログ ファイルの追加と削除
  • 13.5.8 InnoDB データベースのバックアップと復旧
    • 13.5.8.1 InnoDB 復旧の強制
    • 13.5.8.2 チェックポイント
  • 13.5.9 InnoDB データベースを別のマシンに移動する
  • 13.5.10 InnoDB トランザクション モデルとロック
  • 13.5.11 InnoDB パフォーマンス チューニング ヒント
  • 13.5.12 マルチバージョンの実装
  • 13.5.13 InnoDB テーブルとインデックス構造
  • 13.5.14 InnoDB ファイル領域の管理とディスク I/O
  • 13.5.15 InnoDB エラー処理
  • 13.5.16 InnoDB テーブル上の制約
  • 13.5.17 InnoDB トラブルシューティング

13.5.8. InnoDB データベースのバックアップと復旧

[+/-]

13.5.8.1. InnoDB 復旧の強制
13.5.8.2. チェックポイント

安全なデータベース管理の鍵は定期的にバックアップを取る事です。

InnoDB Hot Backup は InnoDB データベースが起動している最中にバックアップを取る事ができるオンライン バックアップ ツールです。InnoDB Hot Backup はデータベースをシャットダウンする必要が無く、ロックの設定も無く、通常のデータベースの処理を邪魔する事もありません。InnoDB Hot Backup は MySQL サーバが起動するコンピュータごとに、年間ライセンス料が €390掛かる、無料ではない(商業用)アドオン ツールです。詳細情報とスクリーンショットに関しては InnoDB Hot Backup home page を参照してください。

もし MySQL サーバをシャットダウンする事ができるなら、テーブルを管理する為に InnoDB によって利用される全てのファイルで構成されているバイナリ バックアップを作成する事ができます。次の手順に従って下さい:

  1. MySQL サーバをシャットダウンし、エラーが発生していない事を確認してください。

  2. 全てのデータ ファイルを(ibdata ファイルと .ibd ファイル) 安全な場所にコピーしてください。

  3. 全ての ib_logfile ファイルを安全な場所にコピーしてください。

  4. my.cnf 設定ファイルを安全な場所にコピーしてください。

  5. 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がそれ自体のファイル キャッシュを破損している為に起きていて、ディスク上のデータは無傷な事があります。まず最初にコンピュータを再起動するのが一番良いでしょう。それを行う事で、データベース破損のように見えていたエラーを排除する事ができます。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates