MySQL Enterprise Backup と、これによって作成される増分バックアップにデフォルトで含まれるバイナリログファイルを使用して、完全バックアップと増分バックアップの間や 2 つの増分バックアップの間の任意の時点の状態にデータベースをリストアできます。
データベースを特定の時点にリカバリするには:
バイナリロギングは、このリストア操作の基準として機能する完全バックアップを取得する前に、MySQL で有効にしておく必要があります。
データベースの最新の完全バックアップをリストアします。
-
リストアしたバックアップの時点に対応するバイナリログの位置を探します。InnoDB は、トランザクションコミット時にテーブルスペースにバイナリログの位置情報だけを格納します。現在のバイナリロギングの位置を InnoDB に認識させるには、バイナリロギングが有効になっている間に、少なくとも 1 つのトランザクションを実行する必要があります。バックアップで
apply-log
操作を実行すると、mysqlbackup によって、バックアップでわかっている最新の MySQL バイナリログの位置が出力されます。また、リストアされるデータで開始すると、mysqld によってバイナリログの位置が出力されます。$ mysqld --defaults-file=/export/mysql/my.cnf 040122 15:41:57 InnoDB: Database was not shut down normally! InnoDB: Starting crash recovery. … InnoDB: Last MySQL binlog file position 0 27183537, file name ./binlog.000005 … mysqld: ready for connections.
MySQL バージョンは 5.1 以上である必要があります。
出力された位置は、MySQL Enterprise Backup がデータファイルのコピーを終了した時点からの MySQL バイナリログのバイト位置です。
-
mysqlbinlog を使用して、増分バックアップに含まれるバイナリログファイルから、バックアップのバイナリログの位置のあとに発生したすべての SQL アクティビティーをダンプします。mysqlbinlog コマンドの出力を、
mysql
に直接パイプする代わりに、出力ファイルに送ります。この出力ファイルには、バイナリログ内のすべての SQL ステートメントのタイムスタンプが含まれます。$ mysqlbinlog --start-position=27183537 /sqldata/binlog.000005 >partial_binlog $ mysqlbinlog /sqldata/binlog.000006 >> partial_binlog $ mysqlbinlog /sqldata/binlog.000007 >> partial_binlog ... $ mysqlbinlog /sqldata/binlog.00000N >> partial_binlog
エディタで、リストアする予定の特定の時点以降のすべてのステートメントを削除します。
-
SQL ステートメントを再実行して、バックアップ後に行われた同じ操作でバックアップデータを更新します。次のように mysql で変更したファイルを処理します。
$ mysql < partial_binlog
データベースを可能な最新の時点にリカバリするには、ファイル内の mysqlbinlog 出力を保存し、そこから最新の SQL ステートメントを削除するステップをスキップします。
mysqlbinlog --start-position=...
からの出力を mysql に直接パイプして、最新のバックアップ後にすべての SQL ステートメントを再実行します。2 つの増分バックアップの間の時点にデータベースをリストアするには、次の増分バックアップに含まれていたバイナリログファイルを使用して、ステップ 3 から 6 を繰り返します。
ポイントインタイム・リカバリでバイナリログを使用するためのヒントについては、バイナリログを使用したポイントインタイム (増分) リカバリを参照してください。