この記事は個人ブログと同じ内容です
AWS が提供しているリレーショナルデータベース Amazon Aurora には Backtrack(バックトラック)という機能があり、これを用いると現在のインスタンス上で特定の時点へのデータの巻き戻しを行なう事ができます。
今回はこの Backtrack を使って Aurora のデータを特定時点へ戻したり進めたりしてみたいと思います。
Aurora Backtrack
Aurora のデータをコンソール上から復元する際に、スナップショットからのリカバリやポイントインタイムリカバリは新しい DB インスタンスを作成するためアプリケーション等、参照している側にもエンドポイントの変更が必要になる一方で、バックトラックは現在の DB クラスタをそのまま特定の時刻まで巻き戻すため、比較的容易に行えるのが利点。
データベースへ変更を加えるたびに新しいログレコードが作成され、ログシーケンス番号 (LSN) が生成されます。巻き戻し機能を有効にすることで、LSN のストレージ用クラスターに FIFO バッファーがプロビジョニングされます。これにより、素早いアクセスと秒単位で測定されたリカバリ時間が利用できるようになります。
引用元:Amazon Aurora Backtrack – 時間を巻き戻す
Aurora DB クラスタの作成
まずは AWS コンソール画面から、Aurora インスンタンスを作成します。
バックトラックの設定項目は以下になっています。
- ターゲットバックトラックウインドウ
- 何時間バックトラックを行えるようにするか。最大 72 時間で、どの時点まで巻き戻せるようにするかの設定です。
キャプチャの通り、ここでは 5 時間としました。
その他、基本的な設定項目はすべて最小構成で行っています。
Auroraクラスタを作成しました。
検証データについて
バックトラックを行うにあたり、1 分おきに insert したデータを作成しました。
表示されているのが全レコードです。このデータに対して Backtrack を行っていきたいと思います。
Backtrack を行う(データを巻き戻す)
AWS コンソール画面から実行します。対象のクラスタを選択して アクション → バックトラックを押下します。
DB クラスターのバックトラック画面に遷移するので、まずは 11:30:00 時点のデータまで巻き戻してみます。
復元可能な最新時刻っていうのは、巻き戻せる最も過去の時刻(=それ以上過去は指定できない)です。
実行後はクラスタの詳細画面に遷移しますが、上部にバックトラックを実行している旨のメッセージが表示されています。
バックトラックが完了すると、以下にように「正常にバックトラックしました。」と表示されます。
データを確認してみます。
最新レコードが 11:29 のものになっています。しっかり 11:30:00 時点のデータに戻っていました。
redo 的なこともやってみる(巻き戻した時点から未来時間へデータを進める)
戻した時刻よりも未来の時刻を指定して、データを未来へ戻してみます。(未来へ戻すとかちょっとややこしい)
現在の 11:30:00 時点から 12:00:00 時点のデータへ進める事ができるか確認してみます。
バックトラック完了後、データを確認してみます。
12:00:00 時点のデータへ進められる事も確認できました。
最後に、用意したデータの最終レコードである 12:03:01 時点のデータに戻します。(12:00:00 -> 12:03:01)
こちらも問題なく、データを戻す事ができました。
ちなみに当然ながらバックトラック日時の設定の際は、現在日時よりも未来日時を指定するとしっかり怒られます。
まとめ
バックトラックを 3 回行いましたが、開始してから完了までの時間は、いずれも 1 分 10 秒ほどでした。(変更レコード量によってここの時間は変動するのかは気になるところ)
料金については、変更レコードの保存量 × 保持時間で掛かるようです。東京リージョンでは時間あたりの料金が 0.014USD/変更レコード100万件 となっていました。(2021/03/06現在)
操作を誤りあるレコードを削除してしまったとか、バッチが失敗してデータが中途半端な状態になってしまった等の時には役立つなと感じました。
Backtrack 普段は出番のない機能ですが、いざという時に役に立つとても良い機能でした。