Enterprise Edition インスタンスから Cluster Edition インスタンスへアップグレードする際、データ移行を行わずに接続先を切り替えると、ダウンタイムおよびデータ損失のリスクが生じます。Data Transmission Service (DTS) を使用して、最小限のダウンタイムで 2 つのインスタンス間のデータを移行してください。この方法では、移行プロセス中もアプリケーションを継続して実行できます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
ソースとなる ApsaraDB RDS for MySQL Enterprise Edition インスタンスおよび宛先となる Cluster Edition インスタンスが存在すること。詳細については、「ApsaraDB RDS for MySQL インスタンスの作成」をご参照ください。
宛先インスタンスの利用可能なストレージ容量が、ソースインスタンス上の合計データサイズを超えること。
binlog_formatをROWに、binlog_row_imageをFULLに設定します。詳細については、「インスタンスのパラメーターを変更する」をご参照ください。これらのパラメーターが正しく設定されていない場合、事前チェックに失敗し、移行タスクを開始できません。
必要な権限
移行タスクの設定前に、DTS で使用するデータベースアカウントに以下の権限を付与してください。
| データベース | スキーマ移行 | 完全なデータ移行 | 増分データ移行 |
|---|---|---|---|
| ソース ApsaraDB RDS for MySQL Enterprise Edition インスタンス | SELECT | SELECT | 読み取りおよび書き込み |
| 宛先 ApsaraDB RDS for MySQL Cluster Edition インスタンス | 読み取りおよび書き込み | 読み取りおよび書き込み | 読み取りおよび書き込み |
アカウントの作成および権限の付与については、「アカウントの作成」および「アカウントの権限の変更」をご参照ください。
移行タイプ
DTS では、要件に応じて組み合わせ可能な 3 種類の移行タイプがサポートされています。
スキーマ移行では、選択したオブジェクト(テーブル、ビュー、トリガー、ストアドプロシージャ、ストアドファンクション)のスキーマをソースから宛先へコピーします。スキーマ移行中に発生する動作は以下のとおりです。
DTS は、外部キーをソースから宛先へ移行します。
ビュー、ストアドプロシージャ、およびストアドファンクションの SECURITY 属性が DEFINER から INVOKER に変更されます。宛先でこれらのオブジェクトを呼び出すには、INVOKER に対して読み取りおよび書き込み権限を付与してください。
DTS はユーザーアカウントを移行しません。
完全なデータ移行および増分データ移行中、DTS はセッションレベルで外部キーに対する制約チェックおよびカスケード操作を一時的に無効化します。データ移行中にソースデータベースでカスケード更新または削除操作を実行すると、データの不整合が発生する可能性があります。
完全なデータ移行では、選択したオブジェクト内のすべての既存データをソースから宛先へコピーします。
増分データ移行では、完全なデータ移行完了後に、ソースから宛先へ変更を継続的に複製します。これにより、2 つのインスタンスを同期状態に保ち、移行中もアプリケーションを継続して実行できます。
移行方式の選択
| 目的 | 選択内容 |
|---|---|
| メンテナンスウィンドウを計画して 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 constraint) が設定されている必要があり、すべてのフィールドが一意である必要があります。これらの制約が設定されていないテーブルを使用すると、宛先で重複レコードが生成される可能性があります。
テーブルを移行対象として選択し、宛先でテーブル名またはカラム名を変更する必要がある場合、1 タスクあたりの上限は 1,000 テーブルです。大規模な移行を行う場合は、複数のタスクに分割するか、データベース全体を移行対象として選択してください。
バイナリログの保持要件:
増分移行のみの場合:バイナリログを 24 時間以上保持する
完全移行 + 増分移行の場合:バイナリログを 最低 7 日間保持する
完全移行完了後は、保持期間を 24 時間以上に短縮できます。これらのしきい値を下回ると、DTS がバイナリログを取得できなくなり、タスクの失敗やデータ損失につながる可能性があります。これらの要件を満たさない場合、DTS のサービスレベルアグリーメント (SLA) はサービス信頼性を保証しません。
スキーマ移行および完全なデータ移行中:データベースまたはテーブルのスキーマを変更する DDL 操作を実行しないでください。タスクが失敗します。
完全なデータ移行のみ実行中:ソースデータベースへのデータ書き込みを実行しないでください。書き込みを継続する必要がある場合は、増分データ移行を含めてください。
一般
互換性を確保するため、ソースおよび宛先のインスタンスで同じ MySQL エンジンバージョンを使用してください。
サーバー負荷を軽減するため、非ピーク時間帯に移行をスケジュールしてください。完全なデータ移行では、両インスタンスの読み取りおよび書き込みリソースが使用されるため、サーバー負荷が増加します。
完全なデータ移行完了後、宛先の表領域 (tablespace) は、同時 INSERT 操作による断片化 (fragmentation) の影響で、ソースよりも大きくなる可能性があります。
FLOAT および DOUBLE カラムについて、DTS は
ROUND(COLUMN, PRECISION)を使用して値を読み取ります。精度 (PRECISION) を明示的に指定しない場合、FLOAT ではデフォルトで 38 桁、DOUBLE では 308 桁が使用されます。開始前に、これらのデフォルト値が要件を満たすことを確認してください。DTS は失敗したタスクを最大 7 日間自動的に再試行します。ワークロードを宛先へ切り替える前に、失敗したタスクを停止またはリリースするか、
REVOKEを実行して DTS の宛先への書き込みアクセスを削除してください。これを実行しない場合、失敗したタスクが再開された際に、ソースデータが宛先データを上書きする可能性があります。ソースデータベース名が無効な場合、タスクの設定前に宛先データベースを手動で作成してください。「データベースの管理」をご参照ください。有効なデータベース名の場合は、DTS が宛先データベースを自動的に作成します。
移行タスクの設定
ステップ 1:データ移行タスクページへ移動
Data Management (DMS) コンソール にログインします。
トップナビゲーションバーで DTS にポインターを合わせ、DTS (DTS) > データ移行 を選択します。
手順は、DMS コンソールのモードによって異なる場合があります。詳しくは、「シンプルモード」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。また、直接「新しい DTS コンソールのデータ移行ページ」にアクセスすることもできます。
ステップ 2:リージョンの選択
データ移行タスク の右側にあるドロップダウンリストから、データ移行インスタンスが配置されているリージョンを選択します。
新しい DTS コンソールでは、左上隅のリージョンを選択します。
ステップ 3:ソースおよび宛先データベースの設定
タスクの作成 をクリックします。[データ移行タスクの作成] ページで、ソースおよび宛先データベースを設定します。
ソースおよび宛先データベースの設定後は、次に進む前にページ上部に表示される 制限事項 を必ずご確認ください。
ソースデータベース
| パラメーター | 値 |
|---|---|
| 既存の DMS データベースインスタンスの選択 | (任意)下記のパラメーターを自動入力するため、既存のインスタンスを選択します。 |
| データベースタイプ | MySQL |
| アクセス方法 | Alibaba Cloud インスタンス |
| インスタンスリージョン | ソースインスタンスが配置されているリージョン |
| Alibaba Cloud アカウント間でのデータ複製 | いいえ |
| RDS インスタンス ID | ソース Enterprise Edition インスタンスの ID |
| データベースアカウント | 必要な権限を持つデータベースアカウント(「必要な権限」をご参照ください) |
| データベースパスワード | アカウントのパスワード |
| 暗号化 | 暗号化なし または SSL 暗号化クラウド証明書を使用した SSL 暗号化の有効化 を選択します。SSL 暗号化を利用する場合は、事前に RDS インスタンスで有効化してください。詳細については、「」をご参照ください。 |
宛先データベース
| パラメーター | 値 |
|---|---|
| 既存の 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 ブロックを手動で追加する必要があります。 データセンターまたはサードパーティのクラウドにある自己管理データベースの場合、データベースの IP アドレスホワイトリストに DTS の CIDR ブロックを手動で追加する必要があります。 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 のみを移行します(DMS 参照)。一時テーブルのデータはスキップされます。ターゲット側のテーブルがロックされる場合があります。[いいえ、gh-ost に準拠]:gh-ost ツールのオリジナル DDL のみを移行します。一時テーブルのデータはスキップされます。シャドウテーブルをフィルターするために、デフォルトまたはカスタムの正規表現を使用します。ターゲット側のテーブルがロックされる場合があります。 重要 移行中にソースデータベースで pt-online-schema-change を使用しないでください。DTS タスクが失敗する原因となります。 |
| 接続失敗時の再試行時間 | DTS が切断された接続を再試行する期間です。有効範囲:10~1,440 分。デフォルト値:720 分。この値は最低でも 30 分に設定してください。このウィンドウ内に DTS が再接続した場合、タスクは自動的に再開されます。ウィンドウ外で再接続した場合は、タスクは失敗します。再試行中も DTS インスタンスの課金が継続されます。複数のタスクが同一のソースまたはターゲットを共有する場合、最も最近設定された値が適用されます。 |
| ETL の構成 | 移行中のデータ変換に抽出・変換・書き出し (ETL) 機能を使用するには、[はい]ETL とはデータ移行またはデータ同期タスクでのETL設定 を選択します。詳細については、「」および「」をご参照ください。 |
ステップ 7:事前チェックの実行
次へ:タスク設定の保存および事前チェック をクリックします。
DTS は自動的に事前チェックを実行します。すべての事前チェック項目が合格するまで、タスクを開始できません。
事前チェック項目のいずれかが失敗した場合、詳細の表示 をクリックして問題を修正し、再チェック をクリックします。
アラートがトリガーされ、無視できる場合、アラートの詳細の確認 をクリックし、無視、OK の順にクリックした後、再チェック をクリックします。アラートを無視すると、データの不整合が発生する可能性があります。
この設定の API パラメーターを表示するには、次へ:タスク設定の保存および事前チェック 上にポインターを合わせ、OpenAPI パラメーターのプレビュー をクリックします。
ステップ 8:移行インスタンスの購入
成功率 が 100 % になるまで待機し、次へ:インスタンスの購入 をクリックします。
[インスタンスの購入] ページで、以下の項目を構成します。
| パラメーター | 説明 |
|---|---|
| リソースグループ | 移行インスタンスのリソースグループ。デフォルトは default リソースグループ です。「Resource Management とは? |
| インスタンスクラス | データ移行インスタンスのインスタンスクラス必要な移行速度に基づいてインスタンスクラスを選択します。より高いクラスでは、より高速な移行が可能です。「」をご参照ください。 |
ステップ 9:移行の開始
Data Transmission Service (従量課金) 利用規約 を確認し、チェックボックスをオンにして同意します。
購入および開始 をクリックし、確認メッセージで OK をクリックします。
移行の進行状況は、データ移行 ページで確認できます。