DTS は、サーバーの停止なしに、オンプレミス MySQL データベースから RDS for MySQL にデータを移行できます。このドキュメントでは、オンプレミス MySQL から RDS for MySQL へのデータ移行タスクを設定する方法について説明します。
背景
移行タイプ
オンプレミス MySQL から RDS for MySQL への移行では、オブジェクト構造移行、既存データ移行および変更データレプリケーションがサポートされています。これらの移行タイプの内容と制限は次の通りです。
オブジェクト構造移行
- DTS は、移行オブジェクトの構造定義をターゲットインスタンスに移行します。
- サポートされるオブジェクトには、テーブル、ビュー、シノニム、トリガー、プロシージャおよび関数が含まれます。
既存データ移行
- 移行中にローカル MySQL データベースに書き込まれた増分データを除き、DTS は移行するオブジェクトのすべての既存データをソースからターゲットに移行します。
- 選択した移行タイプに変更データレプリケーションが含まれている場合、既存データ移行段階では、主キーのない非トランザクションテーブルがロックされ、データの一貫性が保証されます。ロック期間はテーブルのデータ量に依存し、この期間中はロックされたテーブルに書き込むことはできません。ターゲットへの移行が終われば、テーブルのロックが解除されます。
変更データレプリケーション
この段階で DTS は、移行中にローカルの MySQL データベースで取得された変更データをターゲット RDS インスタンスに同期させます。ソースとターゲットは継続的に同期します。
移行の制限
- 移行中に DDL 操作はできません。
- オブジェクト構造移行はイベントをサポートしていません。
- 移行オブジェクトを追加するときにオブジェクト名マッピングを使用すると、追加されたオブジェクトに関連付けられた他のオブジェクトが移行されないことがあります。
- 変更データレプリケーションを実行するには、ソース MySQL データベースの binlog を有効にする必要があり、ソースデータベースの binlog_format は row でなければなりません。
- バージョン 5.6 のソース MySQL からの変更データレプリケーションを実行するには、ソース MySQL の binlog_row_image が full でなければなりません。
移行プロセス
DTS は、次の手順で MySQL から MySQL への移行を実行します。
- オブジェクト構造移行: テーブルやビューを含む構造オブジェクトを移行します。
- 既存データ移行: 既存のすべてのデータを移行します。
- オブジェクト構造移行: プロシージャ、関数、トリガーおよび外部キーを含む構造オブジェクトを移行します。
- 変更データレプリケーション: 既存データ移行後に取得された変更データをレプリケートします。
移行タスクに変更データレプリケーションが含まれていない場合、既存データ移行が完了した後、移行の進捗状況は [オブジェクト構造移行 100%]、[既存データ移行 100%] になりますが、移行ステータスは [移行中] のままになります。これは、移行タスクがプロシージャ、関数、トリガーおよび外部キーを移行することを意味します (3. を参照)。この状況で手動でタスクを終了しないでください。手動タスク終了によって、移行データの矛盾が生じる可能性があります。
前提条件
必要なアクセス権
DTS を使用してオンプレミス MySQL から RDS for MySQL へデータを移行する場合、移行元・移行先の両インスタンスの移行アカウントには、移行タイプに基づいてアクセス許可を与える必要があります。必要な権限は次の通りです。
移行タイプ | ローカル MySQL データベース | ターゲット RDS for MySQL データベース |
---|---|---|
オブジェクト構造移行 | select | 読み書き権限 |
既存データ移行 | select | 読み書き権限 |
変更データレプリケーション |
|
読み書き権限 |
binlog の有効化
変更データレプリケーションを実行するには、ソースデータベースに対して binlog を有効にする必要があります。binlog を有効にするには、次の手順に従います。
次のコマンドを実行して、ソースデータベースで Binlog が有効かどうかを確認します。
log_bin
がOFF
の場合、binlog はソースデータベースでは有効になっていません。binlog を有効にするには、ローカル MySQL データベースで次の設定を行います。log_bin
をmysql_bin
に変更します。binlog_format
をrow
に変更します。server_id
を 1 より大きい整数に変更します。- バージョンが 5.6 の場合、
binlog_row_image
をfull
に変更します。
注意: これらの変更後に MySQL プロセスを再起動してください。
次のコマンドを実行して、ソースデータベースの
binlog_format
がrow
であるかどうかを確認してください。binlog_format
がrow
でない場合、次のコマンドを実行してrow
に設定します。注意: 変更を有効にするには、変更後に MySQL の接続を切断して再接続してください。
MySQL バージョンが 5.6.2 以降の場合は、次のコマンドを実行して、ソースデータベースの
binlog_row_image
がfull
であるかどうかを確認してください。binlog_row_image
がfull
でなければ、次のコマンドを実行してfull
に設定してください。
手順
以下の節では、オンプレミス MySQL から RDS for MySQL へデータを移行するための移行タスクの設定方法について説明します。
ターゲット RDS インスタンスのデータベース作成
データ移行中に、移行先データベースがターゲット RDS インスタンスで定義されていない場合、DTS によって自動的に作成されます。データベース名が RDS 定義標準に準拠していない場合は、移行タスクを設定する前に RDS コンソールでターゲット RDS データベースを作成する必要があります。
RDS 定義標準によれば、RDS データベース名は 64 文字以内で、英小文字、数字、アンダースコアおよびハイフンが使用できます。名前の最初の文字は英字で、最後の文字は英字または数字でなければなりません。
移行アカウントの作成
移行タスクを設定するときは、オンプレミス MySQL データベースとターゲット RDS データベースの移行アカウントを作成する必要があります。必要なアクセス権の節で説明した通り、アカウントには特定のアクセス権が必要です。
移行タスクの設定
移行タスクを設定するには、次の手順を実行します。
DTS コンソールにログインします。
左側のナビゲーションペインで [データ移行] をクリックします。
[移行タスクの作成] をクリックします。
オンプレミス MySQL データベースとターゲット RDS インスタンスの接続情報を次のように設定してから、[ホワイトリストを承認して次のステップに進む] をクリックしてください。
タスク名。デフォルトでは、DTS によって自動的に移行タスクの名前が生成されます。この名前は変更することができ、一意である必要はありません。
ソースデータベース
- インスタンスタイプ: [オンプレミスデータベース] を指定します。
- インスタンスリージョン: ソースインスタンスに最も近いリージョンを指定します。
- データベースエンジン: [MySQL] を指定します。
- ホスト名または IP アドレス: ソース MySQL データベースにアクセスするための IP アドレスを指定します。
- ポート: MySQL データベースのリスナーポートを指定します。
- データベースアカウント: MySQL データベースのアクセスアカウントを指定します。
- データベースパスワード: MySQL アクセスアカウントのパスワードを指定します。
ターゲットデータベース
- インスタンスタイプ: [RDS インスタンス] を指定します。
- インスタンスリージョン: ターゲット RDS インスタンスのリージョンを指定します。
- RDS インスタンス ID: ターゲット RDS インスタンスのインスタンス ID を指定します。RDS インスタンスは、クラシックネットワークまたは VPC ネットワークのいずれにも設置できます。
- データベースアカウント: RDS インスタンスへのアクセスアカウントを指定します。
- データベースパスワード: RDS アクセスアカウントのパスワードを指定します。
この段階で、DTS は DTS サーバーの IP アドレスをターゲット RDS インスタンスのホワイトリストに追加します。
移行オブジェクトと移行タイプを設定し、[事前チェックして開始] をクリックします。
移行タイプ: これにはオブジェクト構造移行と既存データ移行が含まれます。サーバーの停止なしで移行する場合は、これらのすべてのタイプが必要です。既存データ移行では、オブジェクト構造移行と既存データ移行が必要です。
移行オブジェクト: 移行するオブジェクト (データベース、テーブルまたはカラム) を指定します。
注意: オブジェクトが RDS インスタンスに移行された後、オブジェクト名はソース MySQL データベースのオブジェクト名と同じになります。オブジェクトがソースとターゲットで異なる名前を持つ場合、オブジェクト名マッピング機能を使用します。
移行タスクが正式に開始される前に、事前チェックが実行されます。事前チェックが失敗した場合は、[失敗]をクリックして理由と解決方法を確認します。問題をトラブルシューティングし、成功するまで事前チェックを繰り返し実行します。
事前チェックが成功したら、移行タスクを開始します。移行ステータスと進捗状況は、タスクリストで確認できます。
データ検証を行い、ターゲットデータベースに切り替えます。
変更データレプリケーションは連続的な同期プロセスであり、自動的に終了することはできないため、データ検証後にターゲットインスタンスに切り替えることをお勧めします。
変更データレプリケーションが安定し、レイテンシがゼロになった時点で、データ検証を実行してターゲットとソースの日付が一致していることを確認します。データ検証が正常だった場合は、移行タスクを無効にしてターゲットデータベースに切り替えることができます。