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

この記事は個人ブログと同じ内容です

www.ritolab.com


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

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

Aurora Backtrack

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

docs.aws.amazon.com

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

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

Aurora DB クラスタの作成

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

f:id:ro9rito:20210312170436p:plain

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

f:id:ro9rito:20210312170453p:plain

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

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

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

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

f:id:ro9rito:20210312170538p:plain

検証データについて

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

f:id:ro9rito:20210312170605p:plain

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

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

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

f:id:ro9rito:20210312170731p:plain

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

f:id:ro9rito:20210312170753p:plain

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

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

f:id:ro9rito:20210312170812p:plain

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

f:id:ro9rito:20210312170829p:plain

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

f:id:ro9rito:20210312170849p:plain

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

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

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

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

f:id:ro9rito:20210312170934p:plain

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

f:id:ro9rito:20210312170953p:plain

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

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

f:id:ro9rito:20210312171011p:plain

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

f:id:ro9rito:20210312171030p:plain

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

f:id:ro9rito:20210312171043p:plain

まとめ

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

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

aws.amazon.com

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

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