ポイントインタイムリカバリ (つまり、特定の時点よりあとに行われたデータ変更のリカバリ) は、サーバーをバックアップが行われた時点の状態に戻す完全バックアップのリストア後に実行されます。 「NDB Cluster」および「NDB Cluster」レプリケーションを使用して「NDB Cluster」テーブルの point-in-time リカバリを実行するには、ネイティブの NDB
データバックアップ (ndb_mgm クライアントで CREATE BACKUP
を発行して取得) を使用し、ndb_binlog_index
テーブルを (mysqldump を使用して作成したダンプからリストアします。
NDB Cluster のポイントインタイムリカバリを実行するには、次に示す手順に従う必要があります:
ndb_mgm クライアントで
START BACKUP
コマンドを使用して、クラスタ内のすべてのNDB
データベースをバックアップします (セクション23.5.8「NDB Cluster のオンラインバックアップ」を参照してください)。-
その後の時点でクラスタをリストアする前に、
mysql.ndb_binlog_index
テーブルのバックアップを作成します。 このタスクに mysqldump を使用することが、おそらくもっとも簡単です。 このときに、バイナリログファイルもバックアップします。このバックアップは、必要に応じて定期的 (等間隔で 1 時間ごとなど) に更新してください。
(重大な障害またはエラーが発生します。)
最新の既知の良好なバックアップを探します。
-
データノードのファイルシステムをクリアします (ndbd
--initial
または ndbmtd--initial
を使用します)。注記NDB 8.0.21 以降、「ディスクデータ」テーブルスペースおよびログファイルは
--initial
によって削除されます。 以前は、これらを手動で削除する必要がありました。 mysql.ndb_binlog_index
テーブルでDROP TABLE
またはTRUNCATE TABLE
を使用します。ndb_restore を実行して、すべてのデータをリストアします。
ndb_apply_status
テーブルが正しく移入されるように、ndb_restore の実行時に--restore-epoch
オプションを含める必要があります。 (詳細については、セクション23.4.23「ndb_restore — NDB 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「Point-in-Time (増分) リカバリ」も参照してください。