概要

本記事では、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 を利用することで、比較的簡単にデータベースを移行できます。
移行作業を行う際は、事前に十分な準備とテストを行い、慎重に進めてください。