Aurora MySQL 5.7 でポイントインタイムリカバリをやってみた

ポイントインタイムリカバリ機能で特定時点のデータベースを復元してみました。
2020.10.05

こんにちは。コンサル部@大阪オフィスのYui(@MayForBlue)です。

前回、前々回のブログに引き続き、今回はポイントインタイムリカバリ機能を試してみました。

ポイントインタイムリカバリとは?

バックアップ保持期間内の特定時点のDBクラスターを別のクラスターとして再作成できる機能です。
公式ドキュメントは以下です。
特定の時点への DB クラスターの復元

早速やっていきたいと思います。

事前準備

元データ確認

リカバリ元のデータベースtest-rds-clusterに検証用のレコードを作成しました。
検証用レコードの作成方法については以前のブログで紹介していますので、今回は割愛します。

test-rds-cluster内の検証用データを確認しました。

MySQL [testdb]> use testdb;
Database changed
MySQL [testdb]> select count(id) from item;
+-----------+
| count(id) |
+-----------+
|     32768 |
+-----------+
1 row in set (0.01 sec)
MySQL [testdb]>
MySQL [testdb]>
MySQL [testdb]> select * from item where id=1;
+----+---------+--------------------------------+-------+---------------------+
| id | name    | description                    | price | created_at          |
+----+---------+--------------------------------+-------+---------------------+
|  1 | 商品1   | 0a621a93acf3c0d228d576a6d35b77 |  3943 | 2020-06-16 10:50:19 |
+----+---------+--------------------------------+-------+---------------------+
1 row in set (0.00 sec)
MySQL [testdb]>
MySQL [testdb]>
MySQL [testdb]> select * from item order by id desc limit 1;
+-------+-------------+--------------------------------+-------+---------------------+
| id    | name        | description                    | price | created_at          |
+-------+-------------+--------------------------------+-------+---------------------+
| 49137 | 商品49137   | b00907be19c9fd112ba8939d8c51b8 |  6537 | 2020-03-27 10:01:51 |
+-------+-------------+--------------------------------+-------+---------------------+
1 row in set (0.00 sec)
MySQL [testdb]>

レコードを全削除する

レコードを全削除します。
ポイントインタイムリカバリ時にはこの時点より以前の時間を指定して、レコード全削除する前のデータが復元できていることを確認します。

MySQL [testdb]> DELETE FROM item;
Query OK, 32768 rows affected (0.30 sec)
MySQL [testdb]> COMMIT;
Query OK, 0 rows affected (0.02 sec)
MySQL [testdb]>
MySQL [testdb]> select count(id) from item;
+-----------+
| count(id) |
+-----------+
|         0 |
+-----------+
1 row in set (0.00 sec)
MySQL [testdb]> select * from item where id=1;
Empty set (0.00 sec)
MySQL [testdb]> select * from item order by id desc limit 1;
Empty set (0.02 sec)

以上で事前準備が完了です。

手順

ポイントインタイムリカバリを実施していきます。

RDSのコンソールでtest-rds-clusterを選択して、「アクション」から「特定時点への復元」をクリックします。

起動設定の画面の「復元時刻」で復元したい時刻を設定します。
その他詳細項目を設定したらRDSを復元します。

復元が始まると、新たなクラスターが作成されます。

確認

起動したクラスターのステータスが「利用可能」になったことを確認し、データベース内のデータを確認します。

MySQL [testdb]> use testdb;
Database changed
MySQL [testdb]>
MySQL [testdb]>
MySQL [testdb]>
MySQL [testdb]> select count(id) from item;
+-----------+
| count(id) |
+-----------+
|     32768 |
+-----------+
1 row in set (0.41 sec)
MySQL [testdb]> select * from item where id=1;
+----+---------+--------------------------------+-------+---------------------+
| id | name    | description                    | price | created_at          |
+----+---------+--------------------------------+-------+---------------------+
|  1 | 商品1   | 0a621a93acf3c0d228d576a6d35b77 |  3943 | 2020-06-16 10:50:19 |
+----+---------+--------------------------------+-------+---------------------+
1 row in set (0.00 sec)
MySQL [testdb]> select * from item order by id desc limit 1;
+-------+-------------+--------------------------------+-------+---------------------+
| id    | name        | description                    | price | created_at          |
+-------+-------------+--------------------------------+-------+---------------------+
| 49137 | 商品49137   | b00907be19c9fd112ba8939d8c51b8 |  6537 | 2020-03-27 10:01:51 |
+-------+-------------+--------------------------------+-------+---------------------+
1 row in set (0.01 sec)

新たに作成されたクラスター内でレコード全削除前のデータが復元されており、想定通りの動作を確認できました。

最後に

Aurora MySQL でポイントインタイムリカバリ機能を使用する手順をご紹介しました。

前回、前々回のブログでも Aurora の復元系の機能を試したので、近いうちに機能の違いをまとめた記事を書けたらいいなと思っています。

以上、コンサル部@大阪オフィスのYui(@MayForBlue)でした。

参考リンク

特定の時点への DB クラスターの復元 Overview of Backing Up and Restoring an Aurora DB Cluster