Enterprise Edition インスタンスから Cluster Edition インスタンスにアップグレードする際、データ移行なしで接続を切り替えると、ダウンタイムやデータ損失のリスクがあります。Data Transmission Service (DTS) を使用すると、プロセス全体を通してアプリケーションの実行を継続しながら、最小限のダウンタイムで両インスタンス間のデータを移行できます。
前提条件
開始する前に、以下の準備ができていることを確認してください。
-
移行元の ApsaraDB RDS for MySQL エンタープライズ版インスタンスと移行先のクラスター版インスタンスが必要です。 「ApsaraDB RDS for MySQL インスタンスの作成」をご参照ください。
-
移行先インスタンスに、ソースインスタンスの合計データサイズを超える利用可能なストレージ容量があること。
-
ソースインスタンスで、
binlog_formatがROWに、binlog_row_imageがFULLに設定されていること。 詳細については、「インスタンスパラメーターの変更」をご参照ください。 これらのパラメーターが正しく設定されていない場合、事前チェックが失敗し、移行タスクを開始できません。
必要な権限
移行タスクを設定する前に、DTS が使用するデータベースアカウントに以下の権限を付与してください。
| データベース | スキーマ移行 | 完全データ移行 | 増分データ移行 |
|---|---|---|---|
| ソース ApsaraDB RDS for MySQL Enterprise Edition インスタンス | SELECT | SELECT | REPLICATION SLAVE, REPLICATION CLIENT |
| 移行先 ApsaraDB RDS for MySQL Cluster Edition インスタンス | 読み取りおよび書き込み | 読み取りおよび書き込み | 読み取りおよび書き込み |
アカウントの作成と権限の付与については、「アカウントの作成」および「アカウントの権限の変更」をご参照ください。
移行タイプ
DTS は、要件に応じて組み合わせ可能な 3 つの移行タイプをサポートしています。
スキーマ移行は、選択したオブジェクト (テーブル、ビュー、トリガー、ストアドプロシージャ、ストアドファンクション) のスキーマをソースから移行先へコピーします。 スキーマ移行中:
-
DTS は外部キーをソースから移行先へ移行します。
-
ビュー、ストアドプロシージャ、およびファンクションの場合、SECURITY 属性が DEFINER から INVOKER に変更されます。 移行先でこれらのオブジェクトを呼び出すには、INVOKER に読み取りおよび書き込み権限を付与する必要があります。
-
DTS はユーザーアカウントを移行しません。
完全データ移行および増分データ移行中、DTS はセッションレベルで外部キーの制約チェックとカスケード操作を一時的に無効にします。 データ移行中にソースデータベースでカスケード更新および削除操作を実行すると、データ不整合が発生する可能性があります。
完全データ移行は、選択したオブジェクトのすべての履歴データをソースから移行先へコピーします。
増分データ移行は、完全データ移行の完了後、ソースでの変更を移行先へ継続的にレプリケートします。 これにより、両インスタンスが同期され、移行中もアプリケーションの実行を継続できます。
移行アプローチの選択
| 目標 | 選択 |
|---|---|
| 計画的なメンテナンスウィンドウでの 1 回限りの移行 | スキーマ移行 + 完全データ移行 |
| ダウンタイムの最小化:移行中もアプリケーションの実行を継続 | スキーマ移行 + 完全データ移行 + 増分データ移行 |
(増分移行なしで) 完全データ移行のみを実行する場合は、データ不整合を防ぐため、移行中はソースデータベースへのすべての書き込みを停止してください。
増分データ移行でサポートされる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 操作は、データ不整合を引き起こすことがあります。 移行中にテーブルの名前を変更し、そのテーブルが移行オブジェクトとして選択されていた場合、そのデータは移行先にレプリケートされません。 これを回避するには、(個々のテーブルではなく) データベースを移行オブジェクトとして選択し、名前変更前と名前変更後の両方のデータベース名が移行スコープに含まれていることを確認してください。
課金
| 移行タイプ | インスタンス設定料金 | インターネットトラフィック料金 |
|---|---|---|
| スキーマ移行 + 完全データ移行 | 無料 | Alibaba Cloud からインターネット経由でデータが移行される場合にのみ課金されます |
| 増分データ移行 | 有料 | — |
料金の詳細については、「課金の概要」をご参照ください。
制限事項
ソースデータベース
-
ソースサーバーには、十分なアウトバウンド帯域幅が必要です。 帯域幅が不足すると、移行速度が低下します。
-
テーブルには PRIMARY KEY または UNIQUE 制約が必要で、すべてのフィールドが一意である必要があります。 これらの制約がないテーブルでは、移行先で重複レコードが生成されることがあります。
-
テーブルを移行オブジェクトとして選択し、移行先でテーブルまたは列の名前を変更する必要がある場合、制限は 1 タスクあたり 1,000 テーブルです。 より大規模な移行の場合は、複数のタスクに分割するか、データベース全体を移行オブジェクトとして選択してください。
-
バイナリログの保持要件:
-
増分移行のみ:バイナリログを24時間以上保持する必要があります
-
完全移行 + 増分移行:バイナリログを7日間以上保持する必要があります
-
完全移行が完了した後、保持期間を 24 時間以上に短縮できます。 これらのしきい値を下回ると、DTS がバイナリログを取得できなくなり、タスクの失敗やデータ損失につながる可能性があります。 これらの要件が満たされていない場合、DTS のサービスレベルアグリーメント (SLA) はサービスの信頼性を保証しません。
-
-
スキーマ移行および完全データ移行中:データベースまたはテーブルのスキーマを変更する DDL 操作を実行しないでください。 タスクが失敗します。
-
完全データ移行のみの場合:ソースデータベースにデータを書き込まないでください。 書き込みを継続する必要がある場合は、増分データ移行を含めてください。
全般
-
互換性を確保するため、ソースインスタンスと移行先インスタンスでは同じ MySQL エンジンバージョンを使用してください。
-
移行はオフピーク時にスケジュールしてください。 完全データ移行では、両方のインスタンスで読み取りおよび書き込みリソースが使用されるため、サーバーの負荷が増加します。
-
完全データ移行後、同時 INSERT 操作による断片化のため、移行先のテーブルスペースがソースよりも大きくなる場合があります。
-
DTS は、
FLOAT型およびDOUBLE型の列から値を読み取る際にROUND(COLUMN, PRECISION)を使用します。精度を指定しない場合、デフォルトでFLOATは 38 桁、DOUBLEは 308 桁になります。開始する前に、これらのデフォルト値がお客様の要件を満たしていることをご確認ください。 -
DTS は、失敗したタスクを最大 7 日間自動的に再試行します。ワークロードを移行先に切り替える前に、失敗したタスクを停止または解放するか、
REVOKEを実行して移行先への DTS の書き込みアクセス権を削除してください。そうしないと、失敗したタスクが再開されると、移行元のデータが移行先のデータを上書きする可能性があります。 -
ソースデータベース名が無効な場合は、タスクを設定する前に移行先データベースを手動で作成してください。 詳細については、「データベースの管理」をご参照ください。 ソースデータベース名が有効な場合、DTS は移行先データベースを自動的に作成します。
移行タスクの設定
ステップ 1:データ移行タスクページへの移動
-
Data Management (DMS) コンソール にログインします。
-
上部メニューで、DTS にポインターを移動し、[DTS] > [データ移行] を選択します。
手順は DMS コンソールのモードによって異なる場合があります。 詳細については、「シンプルモード」および「DMSコンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。 または、新しいDTS コンソールのデータ移行ページに直接移動することもできます。
ステップ 2:リージョンの選択
データ移行タスク の右側にあるドロップダウンリストから、データ移行インスタンスが存在するリージョンを選択します。
新しい DTS コンソールでは、左上の隅でリージョンを選択します。
ステップ 3:ソースデータベースと移行先データベースの設定
[タスクの作成] をクリックします。 データ移行タスクの作成ページで、ソースデータベースと移行先データベースを設定します。
ソースデータベースと移行先データベースを設定した後、次に進む前にページの上部に表示される制限事項 をお読みください。
ソースデータベース
| パラメーター | 値 |
|---|---|
| [既存のDMSデータベースインスタンスの選択] | (任意) 既存のインスタンスを選択すると、以下のパラメーターが自動的に入力されます。 |
| [データベースタイプ] | MySQL |
| [アクセス方法] | Alibaba Cloud インスタンス |
| [インスタンスリージョン] | ソースインスタンスが存在するリージョン |
| [Alibaba Cloud アカウント間でのデータレプリケート] | いいえ |
| [RDS インスタンス ID] | ソースの Enterprise Edition インスタンスの ID |
| [データベースアカウント] | 必要な権限を持つデータベースアカウント (「必要な権限」をご参照ください) |
| [データベースパスワード] | アカウントのパスワード |
| [暗号化] | [非暗号化] または SSL 暗号化 を選択します。 SSL 暗号化を使用するには、まず RDS インスタンスで有効にする必要があります。 詳細については、「クラウド証明書を使用したSSL暗号化の有効化」をご参照ください。 |
移行先データベース
| パラメーター | 値 |
|---|---|
| [既存のDMSデータベースインスタンスの選択] | (任意) 既存のインスタンスを選択すると、以下のパラメーターが自動的に入力されます。 |
| [データベースタイプ] | MySQL |
| [アクセス方法] | Alibaba Cloud インスタンス |
| [インスタンスリージョン] | 移行先インスタンスが存在するリージョン |
| [RDS インスタンス ID] | 移行先の Cluster Edition インスタンスの ID |
| [データベースアカウント] | 読み取りおよび書き込み権限を持つデータベースアカウント |
| [データベースパスワード] | アカウントのパスワード |
| [暗号化] | [非暗号化] または SSL 暗号化 を選択します。 |
ステップ 4:接続のテスト
[接続をテストして次へ] をクリックします。
DTS は、DTS サーバーの CIDR ブロックを ApsaraDB RDS インスタンスの IP アドレスホワイトリストに自動的に追加します。 Elastic Compute Service (ECS) インスタンス上の自己管理型データベースの場合、DTS はその CIDR ブロックを ECS セキュリティグループルールに追加します。 データベースが複数の ECS インスタンスで実行されている場合は、各インスタンスのセキュリティグループに DTS の CIDR ブロックを手動で追加する必要があります。 データセンターやサードパーティクラウド上の自己管理型データベースの場合、DTS の CIDR ブロックをデータベースの IP アドレスホワイトリストに手動で追加する必要があります。 CIDR ブロックの完全なリストについては、「DTSサーバーのCIDRブロックの追加」をご参照ください。
DTS サーバーの CIDR ブロックをホワイトリストやセキュリティグループルールに追加すると、セキュリティリスクが生じます。 アカウント認証情報の強化、公開ポートの制限、API コールの認証、ホワイトリストとセキュリティグループルールの定期的な監査、Express Connect、VPN Gateway、Smart Access Gateway などのプライベート接続オプションの検討など、予防措置を講じてください。
ステップ 5:オブジェクトの選択と移行設定の構成
次のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| [移行タイプ] | アプローチに基づいて移行タイプを選択します。 「移行アプローチの選択」をご参照ください。 |
| [競合するテーブルの処理モード] | 事前チェックとエラー報告:移行先にソースと同じ名前のテーブルがある場合、事前チェックが失敗します。 これを使用して、移行開始前に競合を検出します。 エラーを無視して続行:名前の競合チェックをスキップします。 完全データ移行中、移行先の既存のレコードは保持されます。 増分データ移行中、既存のレコードは上書きされます。 ソースと移行先でスキーマが異なる場合、特定の列のみが移行されるか、タスクが失敗する可能性があります。 このオプションは注意して使用してください。 |
| [移行先インスタンスにおけるオブジェクト名の大文字/小文字] | デフォルトは DTS のデフォルトポリシー です。 移行先データベースに特定の大文字/小文字の要件がある場合は調整してください。 詳細については、「移行先インスタンスでのオブジェクト名の大文字/小文字の指定」をご参照ください。 |
| [ソースオブジェクト] | 1 つ以上のオブジェクトを選択し、右矢印アイコンをクリックして 選択済みオブジェクト に移動します。 列、テーブル、またはデータベース全体を選択できます。 テーブルまたは列を選択すると、ビュー、トリガー、ストアドプロシージャが移行から除外されます。 |
| [選択済みオブジェクト] | 単一のオブジェクトの名前を変更するには、それを右クリックして名前変更オプションを選択します。 複数のオブジェクトの名前を変更するには、[一括編集] をクリックします。 詳細については、「オブジェクト名のマッピング」をご参照ください。 WHERE 句を使用して行をフィルタリングするには、オブジェクトを右クリックして条件を指定します。 詳細については、「フィルター条件の指定」をご参照ください。 増分レプリケートする DML または DDL 操作を選択するには、オブジェクトを右クリックして操作を設定します。 |
オブジェクトの名前を変更すると、依存するオブジェクトの移行が失敗することがあります。
ステップ 6:詳細設定の構成
[次へ:詳細設定] をクリックします。
データ検証設定:データ検証を有効にするには、「データ検証タスクの設定」をご参照ください。
詳細設定:
| パラメーター | 説明 |
|---|---|
| [モニタリングとアラート] | タスクが失敗した場合や移行の遅延がしきい値を超えた場合にアラートを受信するには、[はい] を選択します。 アラートしきい値と通知設定を構成します。 詳細については、「モニタリングとアラートの設定」をご参照ください。 |
| [ソーステーブルで生成されたオンラインDDLツールのテンポラリテーブルを移行先データベースにコピーする] | DTS がオンライン DDL ツールからのテンポラリテーブルをどのように処理するかを制御します。 はい:テンポラリテーブルのデータを移行します。 データ量が多い場合、遅延が発生する可能性があります。 いいえ、DMS オンライン DDL に適応:DMS からの元の DDL のみを移行します。テンポラリテーブルのデータはスキップされます。 移行先のテーブルがロックされる可能性があります。 いいえ、gh-ost に適応:gh-ost ツールからの元の DDL のみを移行します。テンポラリテーブルのデータはスキップされます。 デフォルトまたはカスタムの正規表現を使用してシャドウテーブルをフィルタリングします。 移行先のテーブルがロックされる可能性があります。 重要
移行中にソースデータベースで |
| [接続失敗時の再試行時間] | DTS が失われた接続を再試行する期間。 有効範囲:10~1,440 分。 デフォルト:720 分。 この値は少なくとも 30 分に設定してください。 この期間内に DTS が再接続すると、タスクは自動的に再開されます。それ以外の場合、タスクは失敗します。 DTS は再試行中にインスタンスの料金を請求します。 複数のタスクが同じソースまたは移行先を共有している場合、最後に設定された値が適用されます。 |
| [ETL の設定] | [はい] を選択して、抽出、変換、ロード (ETL) 機能を使用して移行中にデータを変換します。 詳細については、「ETL とは」および「データ移行またはデータ同期タスクでの ETL の設定」をご参照ください。 |
ステップ 7:事前チェックの実行
[次へ:タスク設定の保存と事前チェック] をクリックします。
DTS が自動的に事前チェックを実行します。 すべての事前チェック項目に合格するまで、タスクを開始できません。
-
事前チェック項目が失敗した場合は、[詳細の表示] をクリックして問題を修正し、[再度事前チェック] をクリックします。
-
アラートがトリガーされ、無視できる場合は、[アラート詳細の確認] をクリックし、次に 無視、OK の順にクリックし、[再度事前チェック] をクリックします。 アラートを無視すると、データ不整合につながる可能性があります。
API パラメーターを表示するには、次へ:タスク設定の保存と事前チェック にカーソルを合わせ、[OpenAPI パラメーターのプレビュー] をクリックします。
ステップ 8:移行インスタンスの購入
成功率 が 100% に達するまで待ってから、[次へ:インスタンスの購入] をクリックします。
[インスタンスの購入] ページで、以下を設定します。
| パラメーター | 説明 |
|---|---|
| [リソースグループ] | 移行インスタンスのリソースグループ。 デフォルトは デフォルトリソースグループ です。 詳細については、「リソース管理とは」をご参照ください。 |
| [インスタンスクラス] | 必要な移行速度に基づいてインスタンスクラスを選択します。 クラスが高いほど、より高速な移行がサポートされます。 詳細については、「データ移行インスタンスのインスタンスクラス」をご参照ください。 |
ステップ 9:移行の開始
-
チェックボックスをオンにして、Data Transmission Service (従量課金) 利用規約 を読み、同意します。
-
[購入して開始] をクリックし、確認メッセージで [OK] をクリックします。
[データ移行] ページで移行の進捗状況を追跡します。