RDS リージョン間データ移行する方法

2022.10.31

こんにちは、イムチェジョンです。
今回のブログでは RDS データベースを他のリージョンに移動する方法についてまとめてみました。

アジェンダ

  1. リージョン間移行方法まとめ
  2. バックアップ取得し、移行
  3. Read Replica(リードレプリカ) を利用し、移行
  4. まとめ

1. リージョン間移行方法まとめ

RDS データベースを他のリージョンに移動する方法は二つです。
- バックアップ取得し、移行
- Read Replica(リードレプリカ) を利用し、移行

また、各移行方法は下記となります。

バックアップ取得し、移行

-1. 既存のリージョンでRDSのバックアップを取得
-2. 移行するリージョンにバックアップをコピー
-3. 移行するリージョンコピーされたバックアップを復元
-4. データが正確に移行されたのか確認
-5. 既存のリージョンのRDSとバックアップを削除

Read Replica(リードレプリカ) を利用し、移行

-1. 移行するリージョンに Read Replica を作成する
-2. 作成した Read Replica をマスターに昇格
-3. 既存リージョンの RDS 削除

2. バックアップ取得し、移行

今回は実際にバックアップを取得して移行する方法をまとめます。
このブログでは韓国リージョンにあるRDSを日本リージョンに移します。

実際に移行する前にデータが成功的に移行されるのを確認するために既存のRDSにデータを入れます。

0) 既存 RDSにデータを入れて確認

以下のコマンドででデータを入力します。

# データベース作成
CREATE DATABASE testDB;
# テーブル作成
CREATE TABLE student
(
     _id CHAR(9),
     name VARCHAR(48) NOT NULL,
     belong VARCHAR(5),
     phone VARCHAR(11),
     status INT DEFAULT 0
);
# データ入力
INSERT INTO student VALUES('20090101', 'A', 'IDE', '01112345678', 1);
INSERT INTO student VALUES('20100102', 'B', 'CSE', '01123435343', 4);
INSERT INTO student VALUES('20110103', 'C', 'MSE', '01121342443', 1);
INSERT INTO student VALUES('20100204', 'D', 'ESE', '01123424343', 2);
INSERT INTO student VALUES('20110106', 'E', 'IME', '01134343222', 0);
INSERT INTO student VALUES('20080104', 'F', 'IDE', '01123432432', 6);
INSERT INTO student VALUES('20090105', 'G', 'CSE', '01112342433', 8);
INSERT INTO student VALUES('20090301', 'H', 'ESE', '01132424244', 5);
INSERT INTO student VALUES('20090302', 'I', 'IDE', '01112321313', 3);
INSERT INTO student VALUES('20100505', 'J', 'CSE', '01123534644', 2);
INSERT INTO student VALUES('20110506', 'K', 'MSE', '01121334525', 8);
INSERT INTO student VALUES('20100507', 'L', 'ESE', '01123423623', 0);
INSERT INTO student VALUES('20110502', 'M', 'IME', '01134332634', 1);
INSERT INTO student VALUES('20080501', 'N', 'IDE', '01123436346', 2);
INSERT INTO student VALUES('20090503', 'O', 'CSE', '01113634645', 3);
INSERT INTO student VALUES('20090509', 'P', 'ESE', '01132427535', 0);
# データ出力
SELECT * FROM student;

出力された結果を確認してみると、下のようなデータが入っています。

1) 既存のリージョンでRDSのバックアップを取得

まずは既存のリージョンの RDSのバックアップ(スナップショット)を取得します。
バックアップを取得する RDSで [アクション]->[スナップショットの取得]をクリックします。

任意のスナップショット名を入力してバックアップを作成します。

するとスナップショットが作成されます。

2) 移行するリージョンにバックアップをコピー

今回には取得するバックアップを東京リージョンにコピーします。
コピーするバックアップを詳細ページで [アクション]->[スナップショットをコピー]をクリックします。

対象リージョンを 東京リージョンに選択して新しいDBスナップショットIDを任意で入力してスナップショットをコピーします。

3) 移行するリージョンコピーされたバックアップを復元

今回は東京リージョンに移動してバックアップを復元します。
ます、東京リージョンに移動します。

コピーされたスナップショット確認して [アクション]->[スナップショットを復元]をクリックしてスナップショットを復元します。

すると、下のようにRDSが復元されます。

4) データが正確に移行されたのか確認

復元された RDSにデータが正確に移行されたのかを確認してみると、下記のように既存の RDSのデータが正確に移行されました。

5) 既存のリージョンのRDSとバックアップを削除

最後に既存リージョンにある RDSとバックアップを削除します。

既存リージョンにあるバックアップ削除

既存リージョンにある RDS 削除

3. Read Replica(リードレプリカ) を利用し、移行

今回には Read Replica(リードレプリカ) を利用し、移行する方法をまとめます。

0) 既存 RDSにデータを入れて確認

今回もバックアップを使用した方法と同じように既存のRDSのデータを確認します。

1) 移行するリージョンに Read Replica を作成する

今回は移行するリージョンに Read Replicaを作成します。
RDS 詳細ページで [アクション]->[リードレプリカを作成]をクリックします。

DB インスタンス識別子と Read Replicaを作成するリージョンを入力、選択します。

東京リージョンに Read Replicaが作成されました。

2) 作成した Read Replica をマスターに昇格

次には東京リージョンに作成した Read Replicaをマスターに昇格します。
[アクション]->[昇格]をクリックします。

すると、下のように東京リージョンの Read Replicaがマスターになっているのを確認できます。

3) 既存リージョンの RDS 削除

次には既存リージョンにある RDSを削除します。

既存リージョンにある RDS 削除

4) 移行されたデータの確認

最後に移行されたデータを確認してみます。
下の写真のようによく移行されたのを確認できます。

4. まとめ

バックアップと Read Replicaを使用する両方、データベースに書き込みがある時間帯に移行する場合には正確なデータが移行されない可能性があります。(バックアップは取得した後に書き込みが入ればデータが異なり、Read Replicaは昇格される時に再起動されるので。)
なので、念のためデータベースを使用してない時間帯に移行するのがいいと思います。