AWS DMSを使ってみる
概要
最近、データ移行に触れる機会があったので、AWSのDMSってサービスが使えるかもと思い、メモがてらにとりあえず使用感を確認する程度に触ってみる。
今回はEC2上のMysqlをマスター、RDS(Aurora)をスレーブとしてデータ移行する。
(本来は互換性ないRDBMS同士で使うと思うが、今回はお試しなので)
事前準備
EC2上にMysqlインストール
詳細手順は割愛(今回はDMSのメモなので)
AuroraでDB作成
詳細手順は割愛(今回はDMSのメモなので)
スキーマ、テーブル作成
両方のDBにdmsdbスキーマを作成。
dmsdbにusersテーブルを作成。
CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT,
`user_name` varchar(255) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`deleted_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
ユーザ作成
Mysqlの方にtestuserというユーザを作成しておく
mysql> CREATE USER 'testuser'@'%' IDENTIFIED BY 'XXXXX';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
実際にデータ移行してみる
レプリケーションインスタンス作成
必要な入力欄をとりあえず入力。
AZはEC2と同じところに配置しておく
しばらく待ってたら、インスタンスが作成された
エンドポイント作成(マスター側)
マスターなので、ソースエンドポイントを選択
事前準備で作成したtestuserを入力
テストの実行してちゃんと繋がるか確認(successfulになったからOK)
エンドポイント作成(マスター側)
スレーブなので、ターゲットエンドポイントを選択。
RDSの場合、プルダウンの中身などが勝手にセットされるので、便利。
とりあえず、手動でadminユーザの情報入力
テストの実行
これでマスターとスレーブのエンドポイントがそれぞれできた。
移行タスクの作成
先ほど作成したソースエンドポイントとターゲットエンドポイントをセット。
移行タイプは「既存データを移行する」を選択。
(レプリケーションの設定するにはマスター側でbin-logとかの設定しないといけないので、今回はやらない)
テーブルマッピングで事前準備で作成したdmsdbをセット。
テーブルはワイルドカード。
ここで移行対象のデータをフィルタリングできるらしい。
移行タスクのスタートアップ設定は「作成時に自動的に行う」
タスクを作成
動作確認
タスク実行前
マスター側のusersテーブル
mysql> select * from users;
+----+-----------+---------------------+---------------------+------------+
| id | user_name | created_at | updated_at | deleted_at |
+----+-----------+---------------------+---------------------+------------+
| 1 | test | 2023-04-23 04:21:38 | 2023-04-23 04:21:38 | NULL |
+----+-----------+---------------------+---------------------+------------+
1 row in set (0.00 sec)
スレーブ側のusersテーブル
mysql> select * from users;
Empty set (0.00 sec)
タスク実行後
スレーブ側のusersテーブル
mysql> select * from users;
+----+-----------+---------------------+---------------------+------------+
| id | user_name | created_at | updated_at | deleted_at |
+----+-----------+---------------------+---------------------+------------+
| 1 | test | 2023-04-23 04:21:38 | 2023-04-23 04:21:38 | NULL |
+----+-----------+---------------------+---------------------+------------+
1 row in set (0.01 sec)
ちゃんとデータ移行された
後片付け
今回作ったリソースを削除しておく
感想
とりあえず、使用感だけ把握したくて使ってみたが、思ったよりもスムーズに設定できた。
互換性のあるRDBMS同士だったかもしれないが、基本的にはPostgresとかでも同じような手順でできると思われる。
Discussion