ポイントインタイムリカバリ (つまり、特定の時点よりあとに行われたデータ変更のリカバリ) は、サーバーをバックアップが行われた時点の状態に戻す完全バックアップのリストア後に実行されます。MySQL Cluster と MySQL Cluster レプリケーションを使用した MySQL Cluster テーブルのポイントインタイムリカバリの実行は、ネイティブの NDB
データバックアップ (ndb_mgm クライアントで CREATE BACKUP
を発行して取得されます) を使用し、ndb_binlog_index
テーブル (mysqldump を使用して作られたダンプ) をリストアすることで実行できます。
MySQL Cluster のポイントインタイムリカバリを実行するには、ここで示すステップに従う必要があります。
ndb_mgm クライアントで
START BACKUP
コマンドを使用して、クラスタ内のすべてのNDB
データベースをバックアップします (セクション18.5.3「MySQL Cluster のオンラインバックアップ」を参照してください)。-
その後の時点でクラスタをリストアする前に、
mysql.ndb_binlog_index
テーブルのバックアップを作成します。このタスクに mysqldump を使用することが、おそらくもっとも簡単です。このときに、バイナリログファイルもバックアップします。このバックアップは、必要に応じて定期的 (等間隔で 1 時間ごとなど) に更新してください。
(重大な障害またはエラーが発生します。)
最新の既知の良好なバックアップを探します。
-
データノードのファイルシステムをクリアします (ndbd
--initial
または ndbmtd--initial
を使用します)。注記MySQL Cluster ディスクデータテーブルスペースおよびログファイルは
--initial
では削除されません。これらを手動で削除する必要があります。 mysql.ndb_binlog_index
テーブルでDROP TABLE
またはTRUNCATE TABLE
を使用します。ndb_restore を実行して、すべてのデータをリストアします。
ndb_apply_status
テーブルが正しく移入されるように、ndb_restore を実行するときに--restore_epoch
を加える必要があります。(詳細については、セクション18.4.20「ndb_restore — MySQL Cluster バックアップのリストア」を参照してください。)必要に応じて、mysqldump の出力から
ndb_binlog_index
テーブルをリストアしたり、バックアップからバイナリログファイルをリストアしたりします。-
最後に適用されたエポック (すなわち、
ndb_apply_status
テーブルのepoch
カラムの最大値) をユーザー変数@LATEST_EPOCH
として検索します (重要)。SELECT @LATEST_EPOCH:=MAX(epoch) FROM mysql.ndb_apply_status;
-
ndb_binlog_index
テーブルの@LATEST_EPOCH
に対応する、最新のバイナリログファイル (@FIRST_FILE
) と位置 (Position
カラム値) をこのファイル内で検索します。SELECT Position, @FIRST_FILE:=File FROM mysql.ndb_binlog_index WHERE epoch > @LATEST_EPOCH ORDER BY epoch ASC LIMIT 1;
mysqlbinlog を使用して、障害が発生した時点まで、特定のファイルと位置からバイナリログイベントを再現します。(セクション4.6.8「mysqlbinlog — バイナリログファイルを処理するためのユーティリティー」を参照してください。)
バイナリログ、レプリケーション、および増分リカバリに関する詳細は、セクション7.5「バイナリログを使用したポイントインタイム (増分) リカバリ」も参照してください。