概要
本記事では、EC2 インスタンス上で稼働している MySQL データベースを、AWS Database Migration Service (DMS) を利用して Amazon RDS (MySQL) へ継続的な移行を実施する手順について解説します。
目次
構成図
事前準備
移行作業を開始する前に、以下の準備が必要です。
- VPC: DMSサブネットグループを作成するのにVPCが必要です。
- EC2 インスタンス: 移行元の MySQL データベースが稼働している EC2 インスタンスが必要です。
- RDS インスタンス: 移行先の RDS インスタンスが必要です。
- セキュリティグループ: EC2インスタンス、RDSインスタンス、DMS レプリケーションインスタンスに関連づけるセキュリティグループが必要です。
また、各セキュリティグループ間で3306ポートの通信を許可する必要があります。 - S3バケット: DMS タスク移行前評価をを実施するためにS3バケットが必要です。
移行手順
1. レプリケーションサブネットグループの作成
DMS のレプリケーションサブネットグループを作成します。
- 名前: 任意の名前を入力します。
- 説明: 任意の説明を入力します。
- VPC: 事前に準備したVPCを選択します。
- サブネットの追加: 任意のサブネットを選択します。
2. DMSレプリケーションインスタンスの作成
DMS のレプリケーションインスタンスを作成します。
これは、データの移行処理を行うための EC2 インスタンスのようなものです。
AWS マネジメントコンソールから DMS を開きます。
「レプリケーションインスタンス」を選択し、「レプリケーションインスタンスの作成」をクリックします。
- 名前: 任意の名前を入力します。
- インスタンスクラス: dms.t3.micro
- エンジンバージョン: 3.5.3
- レプリケーションインスタンスのための: 開発またはテストワークロード (シングル AZ)
- ストレージ: 50
- ネットワークタイプ: IPv4
- VPC: 任意のVPCを選択します。
- レプリケーションサブネットグループ: 作成したサブネットグループを選択します。
- パブリックアクセス可能: 無効化
- アベイラビリティゾーン: 指定なし
- VPC セキュリティグループ: 事前に作成したDMS レプリケーションインスタンス用のセキュリティグループを選択します。
- AWS KMS キー: aws/dms
- メンテナンスウィンドウ: デフォルト
- 自動バージョンアップグレード: はい
3.DMS 用MySQLユーザーの作成
DMSレプリケーションインスタンスからEC2 内の MySQLやRDSへ接続する際に使用する、MySQLユーザーを作成します。
【EC2内のMySQL】
EC2内のMySQLへ接続後以下SQLを実行
####ユーザー作成####
CREATE USER 'sample_user'@'%' IDENTIFIED BY 'password';
####権限付与####
GRANT ALL PRIVILEGES ON *.* TO 'sample_user'@'%' WITH GRANT OPTION;
【RDS】
RDSへ接続後以下SQLを実行
####ユーザー作成####
CREATE USER 'sample_user'@'%' IDENTIFIED BY 'password';
####権限付与####
GRANT ALTER,CREATE,DROP,INDEX, INSERT,UPDATE,DELETE,SELECT ON *.* TO 'sample_user'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON awsdms_control.* TO 'sample_user'@'%' WITH GRANT OPTION;
4. タイムアウト値の設定
タイムアウト値(net_read_timeout、net_wait_timeout)を300秒以上に設定します。
これはソース/ターゲット MySQL のインスタンスへの接続が、タスクの実行中に切断されないために設定する必要があります。ターゲット MySQL のインスタンスへの接続は、タスクの実行中に接続が切断されます
【EC2内のMySQL】
EC2内のMySQLへ接続後以下SQLを実行
####net_read_timeout変更####
SET GLOBAL net_read_timeout=300;
####net_wait_timeout変更####
SET GLOBAL net_write_timeout=300;
【RDS】
RDSインスタンスに関連づけられているパラメータグループの以下パラメータの値を300に変更する
・net_read_timeout
・net_write_timeout
5.ソースとなるデータベース/テーブルの作成
EC2 内の MySQLからRDSインスタンスへレプリケーションするデータベース/テーブルを作成します。
EC2内のMySQLで以下SQLを実行
####データベース作成####
CREATE DATABASE testdatabase;
####データベース選択####
USE testdatabase;
####テーブル作成####
CREATE TABLE user (id int, name varchar(10), address varchar(10));
6.ソースエンドポイントの作成
「エンドポイント」を選択し、「エンドポイントの作成」をクリックします。
- エンドポイントタイプ: ソースエンドポイントを選択します。
- RDS DB インスタンスの選択: 無効化
- エンドポイント識別子: 任意のエンドポイント名を入力します。
- ソースエンジン: MySQL
- エンドポイントデータベースへのアクセス: アクセス情報を手動で提供する
- サーバー名: EC2インスタンスの プライベートIPアドレス
- ポート: 3306
- ユーザー名: sample_user
- パスワード:sample_userのパスワード
- Secure Socket Layer (SSL) モード: なし
- ウィザードまたはエディタを使用して、エンドポイントの追加の固有設定を定義します。: ウィザード
- エンドポイント設定: なし
- エンドポイント接続属性を使用: 無効化
- KMS キー: aws/dms
- エンドポイント接続のテスト: 実行しない
7.ターゲットエンドポイントの作成
「エンドポイント」を選択し、「エンドポイントの作成」をクリックします。
- エンドポイントタイプ: ターゲットエンドポイントを選択します。
- RDS DB インスタンスの選択: 有効化
- RDS インスタンス: 事前に作成したRDSインスタンスを選択します。
- エンドポイント識別子: 任意のエンドポイント名を入力します。
- ソースエンジン: MySQL
- エンドポイントデータベースへのアクセス: アクセス情報を手動で提供する!
- サーバー名: 自動で入力されます。
- ポート: 自動で入力されます。
- ユーザー名: admin
- パスワード:adminのパスワード
- Secure Socket Layer (SSL) モード: なし
- ウィザードまたはエディタを使用して、エンドポイントの追加の固有設定を定義します。: ウィザード
- エンドポイント設定: なし
- エンドポイント接続属性を使用: 無効化
- KMS キー: aws/dms
- エンドポイント接続のテスト: 実行しない
8.ソース/ターゲットエンドポイント接続のテスト
作成したエンドポイントを選択し、「接続」タブより「接続のテスト」をクリックします。
作成したレプリケーションインスタンスを選択し、「テストの実行」をクリックします。
問題なければ「successful」と表示されます。
9.DMS 移行タスクの作成
「データベース移行タスク」を選択し、「データ移行タスクの作成」をクリックします。
- タスク名: 任意のタスク名を入力します。
- ソースエンドポイント: 作成したソースエンドポイントを選択します。
- ターゲットエンドポイント: 作成したターゲットエンドポイントを選択します。
- レプリケーションインスタンス: 作成したレプリケーションインスタンスを選択します。
- 移行タイプ:移行と複製
- ソースからターゲットへのレプリケーションをどのくらいの期間継続する予定ですか?: 一定期間
- タスク設定 – 編集モード: ウィザード
- ソーストランザクションのカスタム CDC 停止モード: デフォルト
- ターゲット DB で復旧テーブルを作成: デフォルト
- ターゲットテーブル準備モード: デフォルト
- フルロードの完了後にタスクを停止する: デフォルト
- LOB 列設定: デフォルト
- 最大 LOB サイズ (KB): デフォルト
- データ検証: デフォルト
- タスクログ: 無効化
- バッチ最適化の適用: 無効化
- 制御テーブル設定: デフォルト
- テーブルマッピング – 編集モード: ウィザード
- 選択ルール – スキーマ: testdatabase
- 選択ルール – ソース名: %
- 選択ルール – ソーステーブル名: %
- 選択ルール – アクション: 含む
- 変換ルール: デフォルト
- 移行前評価を有効化: 有効化
- 移行前評価の実行名: 任意の実行名を入力します。
- Amazon S3 バケット: 事前に作成したS3バケットを選択します。
- IAM role for S3 bucket: Create and use a new IAM role
- IAM role name: デフォルト
- Customize encryption settings: 無効化
- 利用可能な評価: 前提条件、制限を全て選択する。
- 評価レポートの暗号化
- 移行タスクを開始: 後で手動で行う
10.移行タスクの開始
移行前評価の結果に問題がなければ、作成した移行タスクを開始します。
DMS は、EC2 インスタンス上の MySQL データベースからデータを読み取り、RDS インスタンスへ移行します。
11.移行状況の確認
移行タスクのステータスを監視し、移行状況を確認します。
DMS コンソールで、移行タスクの進捗状況やエラー情報を確認できます。
12.移行完了後の確認
移行が完了したら、RDS インスタンスにデータが正しく移行されていることを確認します。
MySQL クライアントツールなどを使用して RDS インスタンスに接続し、データを確認してください。
####ソースMySQLで以下SQLを実行してデータを追加する####
INSERT INTO user values (1, 'Yamada', 'Tokyo');
####ターゲットMySQLで以下SQLを実行してデータが追加されていることを確認する####
SELECT * FROM user;
注意事項
- 移行中は、EC2 インスタンス上の MySQL データベースに負荷がかかる可能性があります。
- 移行元と移行先の MySQL のバージョンが異なる場合、互換性の問題が発生する可能性があります。事前に確認してください。
まとめ
本記事では、EC2 内の MySQL データベースを DMS を経由して RDS へ移行する手順について解説しました。
DMS を利用することで、比較的簡単にデータベースを移行できます。
移行作業を行う際は、事前に十分な準備とテストを行い、慎重に進めてください。