Data Transmission Service (DTS) を使用して、オンプレミス、Elastic Compute Service (ECS) インスタンス、または他のクラウド上にある自己管理 MySQL データベースを、ダウンタイムを最小限に抑えるか、ゼロダウンタイムで ApsaraDB RDS for MySQL に移行します。
このガイドでは、以下の内容について説明します。
-
移行ソリューションの選択
-
ソースデータベースとターゲット RDS インスタンスの準備
-
移行タスクの設定と実行
-
データの検証とアプリケーションの切り替え
移行ソリューションの選択
DTS は、ソリューションを構築するために組み合わせることができる 3 種類の移行タイプをサポートしています。
| 移行タイプ | 機能 |
|---|---|
| スキーマ移行 | データベース、テーブル、ビュー、トリガー、ストアドプロシージャ、および関数の構造をコピーします。DTS は、ビューとストアドプロシージャの DEFINER を INVOKER に変換します。 |
| 完全なデータ移行 | ソースデータベースからターゲット RDS インスタンスに既存のすべてのデータをコピーします。 |
| 増分データ移行 | 完全なデータ移行が開始された後、ソースデータベースからの新しい変更を継続的にコピーし、ほぼゼロダウンタイムでの移行を可能にします。 |
ダウンタイムの許容度に基づいて、これらのタイプを組み合わせてください。
| ソリューション | ダウンタイム | データ整合性 | 制限事項 | コスト | 最適な用途 |
|---|---|---|---|---|---|
| スキーマ + 完全 + 増分 (推奨) | ゼロ | 移行中に書き込みが継続されても、移行完了後に整合性が保たれます | 手動で停止するまで増分移行が実行されます | 有料 (増分) | 本番環境、ゼロダウンタイム要件 |
| スキーマ + 完全 | 完全移行の期間 | 移行中にソースが読み取り専用の場合のみ整合性が保たれます。書き込みが発生すると不整合になります | データ整合性を保つためにソースを静止させる必要があります | 無料 | テスト環境、許容可能なダウンタイム |
課金
スキーマ移行、完全なデータ移行、およびパブリックネットワークのトラフィックは無料です。以下の項目は課金対象です。
-
増分データ移行:実行中に課金されます。一時停止中または失敗した場合は課金されません。
-
データ検証:検証されたデータ量に基づいて課金されます。詳細については、「データ検証料金」をご参照ください。
前提条件
開始する前に、以下を確認してください。
-
ソース MySQL データベースがバージョン 5.1、5.5、5.6、5.7、または 8.0 を実行していること
-
ターゲット RDS for MySQL インスタンスの利用可能なストレージ容量が、ソースデータベースよりも大きいこと
フェーズ 1:移行の準備
ステップ 1:DTS へのクラウドリソースへのアクセス権限の付与
-
Alibaba Cloud アカウントでクイック承認ページを開き、[Authorize] をクリックします。
-
EntityAlreadyExists.RoleおよびEntityAlreadyExists.Role.Policyメッセージが表示された場合、権限付与はすでに完了しています。
ステップ 2:データベースアカウントの作成
ソースデータベース用のアカウント
ソースデータベースで以下のステートメントを実行します。
-- dts_user と Your_Password123 を実際の値に置き換えてください。
CREATE USER 'dts_user'@'%' IDENTIFIED BY 'Your_Password123';
-- スキーマ移行と完全なデータ移行に必要です。
GRANT SELECT ON *.* TO 'dts_user'@'%';
-- 増分データ移行に必要です。
GRANT REPLICATION CLIENT, REPLICATION SLAVE, SHOW VIEW ON *.* TO 'dts_user'@'%';
-- DTS がバイナリログの位置を進めるためのハートビートテーブルを作成するために必要です。
GRANT CREATE ON *.* TO 'dts_user'@'%';
FLUSH PRIVILEGES;
以下の表は、各移行タイプに必要な最小権限をまとめたものです。
| 移行タイプ | 必要な権限 |
|---|---|
| スキーマ移行 | SELECT |
| 完全なデータ移行 | SELECT |
| 増分データ移行 | SELECT; REPLICATION CLIENT, REPLICATION SLAVE, SHOW VIEW; CREATE (ハートビートテーブル用) |
ターゲット RDS インスタンス用のアカウント
-
RDS コンソールで、リージョンを選択し、ターゲット RDS インスタンスの ID をクリックします。
-
左側のナビゲーションウィンドウで [アカウント] をクリックし、次に [アカウントの作成] をクリックします。
-
[アカウントタイプ] を [特権アカウント] に設定し、残りのパラメーターを入力します。
ターゲットアカウントには、ターゲット RDS インスタンスに対する読み取りおよび書き込み権限が必要です。
ステップ 3:ソースデータベースへのアクセス設定
ソースデータベースのデプロイメントに一致するアクセス方法を選択します。
| ソースデータベース | アクセス方法 | 構成 |
|---|---|---|
| パブリック IP アドレスを持つオンプレミス | パブリック IP | ソースデータベースの IP ホワイトリストに DTS サーバーの CIDR ブロックを追加する |
| パブリック IP アドレスを持たないオンプレミス | Cloud Enterprise Network (CEN)、データベースゲートウェイ、または VPN Gateway/Express Connect/Smart Access Gateway (SAG) | IP ホワイトリストに DTS サーバーの CIDR ブロックを追加し、選択した方法のネットワークアクセス構成を完了します |
| ECS インスタンス上のデータベース | [ECS インスタンス] | 設定は不要です |
増分データ移行のためのバイナリロギングの設定
増分データ移行を実行しない場合は、このステップをスキップしてください。
増分データ移行のためには、ソースデータベースでバイナリロギングを有効にする必要があります。以下のパラメーターを設定し、変更を有効にするために MySQL を再起動してください。
バイナリロギングのパラメーター
| パラメーター | 必須の値 | 注意 |
|---|---|---|
log_bin |
mysql_bin (または任意のパス) |
バイナリロギングを有効にします |
binlog_format |
row |
DTS が行レベルの変更をキャプチャするために必要です |
binlog_row_image |
full |
MySQL 5.6 以降で必要です |
server_id |
1 より大きい任意の整数 | レプリケーショントポロジー内で一意である必要があります |
expire_logs_days |
7 以上 | MySQL 8.0 より前のバージョン。デフォルト:0 (有効期限なし) |
binlog_expire_logs_seconds |
604800 以上 (7 日間) | MySQL 8.0 以降。デフォルト:2592000 (30 日間) |
log_slave_updates |
ON |
デュアルプライマリクラスターのみ |
バイナリログは少なくとも 7 日間保持してください。保持期間が短すぎると、DTS が必要なバイナリログを取得できず、データの不整合や損失が発生する可能性があります。
Linux での設定
-
/etc/my.cnfを編集します。log_bin=mysql_bin binlog_format=row # MySQL 8.0 より前: # expire_logs_days=7 # MySQL 8.0 以降: # binlog_expire_logs_seconds=604800 server_id=2 binlog_row_image=full # デュアルプライマリクラスターのみ: # log_slave_updates=ON -
MySQL を再起動します。
/etc/init.d/mysqld restart
Windows での設定
-
my.iniを編集します。log_bin=mysql_bin binlog_format=row # MySQL 8.0 より前: # expire_logs_days=7 # MySQL 8.0 以降: # binlog_expire_logs_seconds=604800 server_id=2 binlog_row_image=full # デュアルプライマリクラスターのみ: # log_slave_updates=ON -
MySQL を再起動します。
net stop mysql net start mysql
フェーズ 2:移行タスクの設定
-
DTS コンソールにログインし、左側のナビゲーションウィンドウで [データ移行] をクリックし、次に [タスクの作成] をクリックします。
-
ソースデータベースとターゲット RDS インスタンスを設定します。
ソースデータベース
パラメーター 値 データベースタイプ MySQL アクセス方法 ステップ 3 で設定した方法を選択します (例:[パブリック IP]) インスタンスリージョン ソースデータベースが配置されているリージョン [ドメイン名または IP] ソースデータベースのパブリックエンドポイントまたは IP アドレス ポート ソースデータベースのサービスポート。デフォルト:3306 [データベースアカウント] ステップ 2 データベースパスワード アカウントのパスワード 暗号化 [非暗号化]、SSL が有効な場合は [SSL 暗号化] (CA 証明書をアップロードし、[CA キー] を設定) ターゲット RDS インスタンス
パラメーター 値 データベースタイプ MySQL アクセス方法 Alibaba Cloud インスタンス インスタンスリージョン ターゲット RDS インスタンスのリージョン Alibaba Cloud アカウント間のデータレプリケーション いいえ RDS インスタンス ID ターゲット RDS インスタンスの ID データベースアカウント ステップ 2 データベースパスワード アカウントのパスワード 暗号化 暗号化なし または SSL 暗号化。SSL 暗号化の場合、まず送信先の RDS インスタンスでSSL 暗号化を有効にしてください -
[接続をテストして続行] をクリックします。ダイアログボックスで [接続をテスト] をクリックします。テストが失敗した場合は、続行する前にエラーメッセージに基づいて問題を修正してください。
-
移行するオブジェクトを設定します。
オブジェクトの設定
[オブジェクトの設定] タブで、移行タイプを設定し、移行するオブジェクトを選択します。[次へ:詳細設定] をクリックします。
パラメータ 説明 移行タイプ 完全移行の場合は、[スキーマ移行] と [完全データ移行] を選択します。ダウンタイムを最小限に抑えるには、[増分データ移行] を追加します。 ソースオブジェクト 移行するデータベース、テーブル、またはカラムを選択し、
をクリックして [選択したオブジェクト] に追加します。選択したオブジェクト オブジェクトを右クリックして名前を変更するか、WHERE フィルターを設定します。複数のオブジェクトの名前を一度に変更するには、[一括編集] をクリックします。 競合するテーブルの処理モード [事前チェックしてエラーを報告] (デフォルト): 移行先に同じ名前のテーブルが既に存在する場合、事前チェックは失敗します。[エラーを無視して続行]: このチェックをスキップします。完全移行中は既存のレコードが保持され、増分移行中は既存のレコードが上書きされます。 ソースデータベースのトリガーを移行する方法 [スキーマ移行] と [増分データ移行]トリガーの同期または移行 の両方が選択されている場合に使用できます。詳細については、「」をご参照ください。 イベントを移行するかどうか ソースデータベースからイベントを移行するかどうかを指定します。[はい]ソースデータベースからのイベントの同期または移行 を選択した場合は、後続の操作を完了する必要があります。詳細については、「」をご参照ください。 移行評価を有効にする [スキーマ移行] が選択されている場合に使用できます。ソースと移行先のスキーマ (インデックス長、ストアドプロシージャ、依存テーブル) の互換性をチェックします。結果は事前チェック中に表示されますが、事前チェックの結果には影響しません。 移行先インスタンスのオブジェクト名の大文字/小文字 移行先のデータベース、テーブル、カラム名の大文字/小文字をコントロールします。デフォルトは [DTS のデフォルトポリシー]オブジェクト名の大文字/小文字の指定 です。詳細については、「」をご参照ください。 (オプション) 詳細設定
(オプション) [詳細設定] タブで、必要に応じて設定を調整します。[次へ:データ検証] をクリックします。
パラメーター 説明 タスクスケジューリング用の専用クラスター デフォルトでは、タスクは共有クラスターで実行されます。安定性を向上させるには、専用クラスターをご購入ください。 オンライン DDL ツールの一時テーブルをコピー ソースで DMS または gh-ost を使用してオンライン DDL を実行する場合: [はい] を選択すると、一時テーブルのデータが移行されます (遅延が増加する可能性があります)。[いいえ、DMS オンライン DDL に適応] を選択すると、元の DDL 操作のみが移行されます。[いいえ、gh-ost に適応] を選択すると、gh-ost からの元の DDL のみが移行されます。 アカウントを移行するかどうか ソースからアカウント情報を移行します。この機能を有効にした場合は、移行するアカウントを選択し、アカウント権限を確認してください。 接続失敗時の再試行時間 接続失敗後、DTS が再試行する時間です。範囲:10~1,440 分。デフォルト:720 分。少なくとも 30 分以上に設定してください。 その他の問題での再試行時間 DDL または DML の失敗後、DTS が再試行する時間です。範囲:1~1,440 分。デフォルト:10 分。[接続失敗時の再試行時間] よりも短くする必要があります。 完全データ移行のスロットリングを有効化 ソースデータベースへの QPS、完全移行の RPS、および移行速度 (MB/s) を制限します。データベースサーバーの負荷を軽減するために使用します。 増分データ移行のスロットリングを有効化 増分移行の RPS と移行速度 (MB/s) を制限します。 ETL の設定 抽出・変換・書き出し (ETL) 処理を有効にします。詳細については、「ETL の設定」をご参照ください。 モニタリングとアラート タスクが失敗した場合、または遅延がしきい値を超えた場合にアラートを送信します。詳細については、「モニタリングとアラートの設定」をご参照ください。 ハートビートテーブルに対する SQL 操作を削除するかどうか [はい]:ハートビート SQL をソースに書き込みません (移行遅延が表示される場合があります)。[いいえ]:ハートビート SQL をソースに書き込みます (物理バックアップとクローニングに影響する可能性があります)。
フェーズ 3:事前チェックの実行と移行の開始
-
[次へ:タスク設定を保存して事前チェック] をクリックします。DTS は設定と環境を検証します。
-
事前チェックが完了するのを待ちます。
-
[成功率] が 100% に達した場合、環境は準備完了です。警告を確認してリスクがないことを確認し、無視して続行します。
-
事前チェックが失敗した場合は、[詳細を表示] をクリックして問題を修正し、再度事前チェックを実行します。
-
-
[次へ:インスタンスの購入] をクリックします。
-
[リソースグループ] (デフォルト:[デフォルトリソースグループ]) と適切な DTS インスタンス仕様を選択します。
-
[Data Transmission Service (従量課金) 利用規約] に同意し、[購入して開始] をクリックし、次に [確認] をクリックします。移行タスクが自動的に開始されます。
フェーズ 4:データ検証と切り替え
-
移行タスクのステータスを監視します。
-
増分データ移行のないタスクは、完了すると [ステータス:完了] と表示されます。
-
増分データ移行のあるタスクは、[ステータス:実行中] と表示され、自動的には終了しません。
-
-
完全移行が完了し、増分移行の遅延がほぼゼロになった後、データ整合性を検証します。オプション 1 — 自動検証:DTS でデータ検証タスクを設定します。オプション 2 — 手動検証:ソースデータベースとターゲット RDS インスタンスの両方で以下のクエリを実行し、結果を比較します。
-- 行数を比較 SELECT COUNT(*) FROM <your_table>; -- 主要なビジネスメトリクスを比較 SELECT SUM(amount) FROM orders WHERE create_time >= '2024-01-01'; -
オフピーク時にアプリケーションを切り替えます。
-
アプリケーションを停止します。
-
増分移行の遅延がゼロに達したことを確認します。
-
アプリケーションのデータベース接続文字列をターゲット RDS インスタンスのエンドポイントに更新します。
-
切り替えが完了したら、移行タスクをリリースします。
-
増分データ移行でサポートされる SQL 操作
| 操作タイプ | SQL ステートメント |
|---|---|
| DML | INSERT, UPDATE, DELETE |
| DDL | ALTER TABLE, ALTER VIEW, CREATE FUNCTION, CREATE INDEX, CREATE PROCEDURE, CREATE TABLE, CREATE VIEW, DROP INDEX, DROP TABLE, RENAME TABLE, TRUNCATE TABLE |
RENAME TABLE 操作はデータの不整合を引き起こす可能性があります。移行中にテーブルの名前を変更し、そのテーブル (親データベースではなく) を移行オブジェクトとして選択した場合、名前が変更されたテーブルのデータは移行されません。これを避けるには、データベースを移行オブジェクトとして選択し、名前変更前と名前変更後の両方のデータベース名が移行範囲に含まれていることを確認してください。
よくある質問
Q:DTS が「Host 'XXX' is not allowed to connect to this MySQL server」というエラーで接続に失敗するのはなぜですか?
これは Java Database Connectivity (JDBC) の接続エラーです。アカウントの認証情報が正しく、アカウントに必要な権限があることを確認してください。特権アカウントを使用して接続をテストすると、問題の切り分けに役立ちます。
Q:移行タスクを作成する際に、中国 (福州) リージョンの RDS インスタンスを選択できないのはなぜですか?
DTS は中国 (福州) リージョンのインスタンスをサポートしていません。代替案として、自己管理 MySQL 5.7 または 8.0 データベースをクラウドにバックアップしてください。