RitoLabo

AWS Aurora Backtrack(バックトラック)で DB データを特定日時の時点に巻き戻す

  • 公開:
  • カテゴリ: AWS
  • タグ: AWS,Aurora,Backtrack

AWS が提供しているリレーショナルデータベース Amazon Aurora には Backtrack(バックトラック)という機能があり、これを用いると現在のインスタンス上で特定の時点へのデータの巻き戻しを行なう事ができます。

今回はこの Backtrack を使って Aurora のデータを特定時点へ戻したり進めたりしてみたいと思います。

アジェンダ
  1. Aurora Backtrack
  2. Aurora DB クラスタの作成
  3. 検証データについて
  4. Backtrack を行う(データを巻き戻す)
  5. redo 的なこともやってみる(巻き戻した時点から未来時間へデータを進める)

Aurora Backtrack

Aurora のデータをコンソール上から復元する際に、スナップショットからのリカバリやポイントインタイムリカバリは新しい DB インスタンスを作成するためアプリケーション等、参照している側にもエンドポイントの変更が必要になる一方で、バックトラックは現在の DB クラスタをそのまま特定の時刻まで巻き戻すため、比較的容易に行えるのが利点。

Aurora DB クラスターのバックトラック
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.Backtrack.html

データベースへ変更を加えるたびに新しいログレコードが作成され、ログシーケンス番号 (LSN) が生成されます。巻き戻し機能を有効にすることで、LSN のストレージ用クラスターに FIFO バッファーがプロビジョニングされます。これにより、素早いアクセスと秒単位で測定されたリカバリ時間が利用できるようになります。

引用元:Amazon Aurora Backtrack – 時間を巻き戻す

Aurora DB クラスタの作成

まずは AWS コンソール画面から、Aurora インスンタンスを作成します。

DBインスタンス作成画面

バックトラックの設定項目は以下になっています。

Aurora Backtrack 設定画面

ターゲットバックトラックウインドウ
何時間バックトラックを行えるようにするか。最大 72 時間で、どの時点まで巻き戻せるようにするかの設定です。

キャプチャの通り、ここでは 5 時間としました。

その他、基本的な設定項目はすべて最小構成で行っています。

Auroraクラスタを作成しました。

DBインスタンス一覧

検証データについて

バックトラックを行うにあたり、1 分おきに insert したデータを作成しました。

1分おきにinsertしたデータ

表示されているのが全レコードです。このデータに対して Backtrack を行っていきたいと思います。

Backtrack を行う(データを巻き戻す)

AWS コンソール画面から実行します。対象のクラスタを選択して アクション → バックトラックを押下します。

AWSコンソール画面からバックトラックを開く

DB クラスターのバックトラック画面に遷移するので、まずは 11:30:00 時点のデータまで巻き戻してみます。

Amazon Aurora DB クラスターのバックトラック画面

復元可能な最新時刻っていうのは、巻き戻せる最も過去の時刻(=それ以上過去は指定できない)です。

実行後はクラスタの詳細画面に遷移しますが、上部にバックトラックを実行している旨のメッセージが表示されています。

バックトラック実行中のメッセージ

バックトラックが完了すると、以下にように「正常にバックトラックしました。」と表示されます。

バックトラック完了のメッセージ

データを確認してみます。

11:30:00 バックトラック後のデータ

最新レコードが 11:29 のものになっています。しっかり 11:30:00 時点のデータに戻っていました。

redo 的なこともやってみる(巻き戻した時点から未来時間へデータを進める)

戻した時刻よりも未来の時刻を指定して、データを未来へ戻してみます。(未来へ戻すとかちょっとややこしい)

現在の 11:30:00 時点から 12:00:00 時点のデータへ進める事ができるか確認してみます。

バックトラックを 12:00:00 に設定

バックトラック完了後、データを確認してみます。

12:00:00 バックトラック後のデータ

12:00:00 時点のデータへ進められる事も確認できました。

最後に、用意したデータの最終レコードである 12:03:01 時点のデータに戻します。(12:00:00 -> 12:03:01)

バックトラックを 12:03:01 に設定

こちらも問題なく、データを戻す事ができました。

12:03:01 バックトラック後のデータ

ちなみに当然ながらバックトラック日時の設定の際は、現在日時よりも未来日時を指定するとしっかり怒られます。

バックトラックは現在よりも未来日時は入力できない

まとめ

バックトラックを 3 回行いましたが、開始してから完了までの時間は、いずれも 1 分 10 秒ほどでした。(変更レコード量によってここの時間は変動するのかは気になるところ)

料金については、変更レコードの保存量 × 保持時間で掛かるようです。東京リージョンでは時間あたりの料金が 0.014USD/変更レコード100万件 となっていました。(2021/03/06現在)
https://aws.amazon.com/jp/rds/aurora/pricing/#Backtrack

操作を誤りあるレコードを削除してしまったとか、バッチが失敗してデータが中途半端な状態になってしまった等の時には役立つなと感じました。

Backtrack 普段は出番のない機能ですが、いざという時に役に立つとても良い機能でした。