Data Transmission Service (DTS) を使用して、OceanBase データベース (MySQL 互換モード、Community Edition V4.x) から PolarDB for MySQL クラスターにデータを移行します。DTS は、この移行パスに対してスキーマ移行、完全なデータ移行、および増分データ移行をサポートしています。
前提条件
開始する前に、以下を確認してください。
ソース OceanBase データベースが Community Edition V4.x を実行していること
ターゲット PolarDB for MySQL クラスターのストレージ容量がソースデータベースよりも大きいこと。詳細については、「Enterprise Edition クラスターの購入」および「サブスクリプションクラスターの購入」をご参照ください。
制限事項
ソースデータベースの制約
ソースデータベースは ApsaraDB for OceanBase データベースであってはなりません。
ソースデータベースサーバーには、十分なアウトバウンド帯域幅が必要です。帯域幅が不足すると、移行速度が低下します。
移行対象のテーブルには PRIMARY KEY または UNIQUE 制約が必要であり、すべてのフィールドが一意である必要があります。そうでない場合、ターゲットデータベースに重複レコードが含まれる可能性があります。
移行オブジェクトとしてテーブルを選択し、ターゲットデータベースでテーブル名または列名を変更する必要がある場合、1 つのタスクで移行できるテーブルは最大 1,000 個です。1 つのタスクで 1,000 個を超えるテーブルを移行すると、リクエストエラーが発生します。この場合、移行を複数のタスクに分割するか、代わりにデータベース全体を移行してください。
GEOMETRY 型のデータは、完全なデータ移行でのみ移行できます。この型では増分データ移行はサポートされていません。
MySQL データベースの列名では、大文字と小文字が区別されません。ソースデータベースに大文字と小文字のみが異なる複数の列がある場合、DTS はこれらの列のデータを同じターゲット列に移行するため、予期しない結果が生じる可能性があります。
その他の制約
DTS は、DATETIME 型から VARCHAR 型へのデータ変換をサポートしていません。
完全なデータ移行ではスロットリングは利用できません。
ソースデータベース名が PolarDB for MySQL の命名規則に準拠していない場合は、移行タスクを設定する前に PolarDB for MySQL クラスターにターゲットデータベースを作成してください。その後、[オブジェクトと詳細設定の構成] ステップでオブジェクト名マッピング機能を使用して名前を変更します。命名規則とデータベースの作成方法については、「データベース管理」をご参照ください。
FLOAT 型または DOUBLE 型の列の場合、DTS は
ROUND(COLUMN,PRECISION)を適用して値を取得します。精度が指定されていない場合、DTS は FLOAT には 38 桁、DOUBLE には 308 桁をデフォルトとします。これらのデフォルト値がビジネス要件を満たしていることを確認してください。DTS は失敗したタスクを最大 7 日間自動的に再試行します。ワークロードをターゲットデータベースに切り替える前に、失敗したタスクを停止またはリリースするか、
REVOKEを実行してターゲットデータベースに対する DTS の書き込み権限を削除してください。そうしないと、再開されたタスクがターゲットデータをソースデータで上書きする可能性があります。DDL 文がターゲットデータベースで実行に失敗した場合でも、DTS タスクは実行を継続します。失敗した DDL 文はタスクログで確認できます。詳細については、「タスクログの表示」をご参照ください。
操作上の制限
データの不整合を防ぐため、移行中はこれらの制限を適用してください。
スキーマ移行および完全なデータ移行中:データベースまたはテーブルのスキーマを変更するデータ定義言語 (DDL) 操作を実行しないでください。
完全なデータ移行のみの場合:ソースデータベースにデータを書き込まないでください。移行全体でデータ整合性を確保するには、スキーマ移行、完全なデータ移行、増分データ移行を一緒に選択してください。
完全なデータ移行および増分データ移行中:DTS はセッションレベルで外部キー制約チェックとカスケード操作を一時的に無効にします。この期間中にソースデータベースでカスケード操作または削除操作を実行すると、データの不整合が発生する可能性があります。
RENAME TABLE 操作:増分移行中にテーブル名を変更すると、データの不整合が発生する可能性があります。テーブル名を変更する必要がある場合は、名前変更前後のテーブルを含むデータベースを移行オブジェクトに追加してください。
スキーマ移行では、外部キーがソースデータベースからターゲットデータベースに移行されます。
課金
| 移行タイプ | タスク設定料金 | データ転送料金 |
|---|---|---|
| スキーマ移行と完全なデータ移行 | 無料 | この例では無料 |
| 増分データ移行 | 課金済み | — |
増分データ移行の料金については、「課金概要」をご参照ください。
増分移行でサポートされる 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 |
必要なデータベースアカウントの権限
| データベース | スキーマ移行 | 完全なデータ移行 | 増分データ移行 |
|---|---|---|---|
| OceanBase (ユーザーレベル) | SELECT | SELECT | SELECT |
| OceanBase (テナントレベル) | 通常テナント | 通常テナント | 通常テナント |
| PolarDB for MySQL | ターゲットデータベースでの読み取りおよび書き込み | ターゲットデータベースでの読み取りおよび書き込み | ターゲットデータベースでの読み取りおよび書き込み |
増分データ移行の場合、OceanBase サーバーに oblogproxy をインストールし、システムテナントを設定する必要があります。oblogproxy は増分ログを管理するためのプロキシサービスです。インストール手順については、インストールパッケージを使用して「」oblogproxy のインストールとデプロイをご参照ください。
アカウントの作成と権限の付与に関する手順については、以下をご参照ください。
PolarDB for MySQL: 「データベースアカウントの作成と管理」
OceanBase から PolarDB for MySQL へのデータ移行
ステップ 1: データ移行タスクページへの移動
Data Management (DMS) コンソールにログインします。
上部のナビゲーションバーで、DTS をクリックします。
左側のナビゲーションウィンドウで、DTS (DTS) > データ移行 を選択します。
ナビゲーションは、DMS コンソールのモードおよびレイアウトによって異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。また、新しい DTS コンソールのデータ移行タスクページに直接アクセスすることもできます。
ステップ 2: リージョンの選択
[データ移行タスク] の横にあるドロップダウンリストから、データ移行インスタンスが存在するリージョンを選択します。
新しい DTS コンソールでは、ページの左上隅でリージョンを選択します。
ステップ 3: ソースデータベースとターゲットデータベースの設定
[タスクの作成] をクリックします。[タスクの作成] ウィザードページで、次のパラメーターを設定します。
ソースデータベース
| パラメーター | 説明 |
|---|---|
| 既存の DMS データベースインスタンスを選択 | (オプション) 既存のインスタンスを選択して、ソースデータベースのパラメーターを自動入力します。これをスキップする場合は、以下のパラメーターを手動で設定します。 |
| データベースタイプ | [ApsaraDB OceanBase for MySQL] を選択します。 |
| アクセス方法 | ソースデータベースがデプロイされている場所に基づいてアクセス方法を選択します。この例では、[パブリック IP アドレス] を使用します。 |
| インスタンスリージョン | ソース OceanBase データベースが存在するリージョン。 |
| ドメイン名または IP | ソース OceanBase データベースのエンドポイント。 |
| ポート番号 | ソース OceanBase データベースのサービスポート。デフォルト: 2881。 |
| ログプロキシの IP アドレス (ドメイン名はサポートされていません) | ソース OceanBase データベースの oblogproxy の IP アドレス。 |
| ログプロキシのポート | oblogproxy のリスニングポート。デフォルト: 2983。 |
| データベースアカウント | ソース OceanBase データベースのアカウント。必要な権限については、「必要なデータベースアカウントの権限」をご参照ください。 |
| データベースパスワード | データベースアカウントのパスワード。 |
| タスク名 | タスクの名前。DTS は自動的に名前を割り当てますが、タスクを識別しやすくするために、わかりやすい名前を指定してください。名前は一意である必要はありません。 |
ソースデータベースがセルフマネージドの場合、移行前に必要な環境を設定してください。詳細については、「準備の概要」をご参照ください。
ターゲットデータベース
| パラメーター | 説明 |
|---|---|
| 既存の DMS データベースインスタンスを選択 | (オプション) 既存のインスタンスを選択して、ターゲットデータベースのパラメーターを自動入力します。これをスキップする場合は、以下のパラメーターを手動で設定します。 |
| データベースタイプ | [PolarDB for MySQL] を選択します。 |
| アクセス方法 | [Alibaba Cloud インスタンス] を選択します。 |
| インスタンスリージョン | ターゲット PolarDB for MySQL クラスターが存在するリージョン。 |
| PolarDB クラスター ID | ターゲット PolarDB for MySQL クラスターの ID。 |
| データベースアカウント | ターゲットクラスターのデータベースアカウント。必要な権限については、「必要なデータベースアカウントの権限」をご参照ください。 |
| データベースパスワード | データベースアカウントのパスワード。 |
| 暗号化 | (オプション)送信先クラスターへの接続に対して SSL 暗号化を有効化します。詳細については、「SSL 暗号化の設定」をご参照ください。 |
ステップ 4: 接続性のテスト
[接続性のテストと続行] をクリックします。
ソースデータベースが IP アドレスホワイトリストを使用している場合、[接続性のテストと続行] をクリックする前に、DTS サーバーの CIDR ブロックをホワイトリストに追加してください。
Alibaba Cloud データベースインスタンス (ApsaraDB RDS for MySQL や ApsaraDB for MongoDB など):DTS は自動的に CIDR ブロックを追加します。
ECS 上のセルフマネージドデータベース:DTS は自動的に ECS セキュリティグループルールに CIDR ブロックを追加します。ECS インスタンスがデータベースにアクセスできることを確認してください。データベースが複数の ECS インスタンスにまたがる場合は、各インスタンスに手動で CIDR ブロックを追加してください。
データセンターまたはサードパーティクラウド上のセルフマネージドデータベース:データベースの IP アドレスホワイトリストに手動で CIDR ブロックを追加してください。
DTS サーバーの CIDR ブロックの一覧については、「DTS サーバーの CIDR ブロックをオンプレミスデータベースのセキュリティ設定に追加する」をご参照ください。
DTS の CIDR ブロックをデータベースのホワイトリストや ECS のセキュリティグループに追加すると、セキュリティ上のリスクが生じます。続行する前に、強力な認証情報の使用、公開ポートの制限、API 呼び出しの認証、ホワイトリストルールの定期的な監査、Express Connect、VPN Gateway、または Smart Access Gateway を介した接続などの対策を講じてください。
ステップ 5: オブジェクトと移行設定の構成
| パラメーター | 説明 |
|---|---|
| 移行タイプ | シナリオに基づいて移行タイプを選択します。 スキーマ移行 + 全データ移行: ダウンタイムを伴うワンタイム移行です。 スキーマ移行 + 全データ移行 + 増分データ移行: 最小限のダウンタイムでオンライン移行を行います。 [増分データ移行] を選択しない場合、移行中にソースデータベースへの書き込みを行わないでください。 |
| 競合するテーブルの処理モード | - 事前チェックとエラーの報告: ターゲットデータベースに既に同じ名前のテーブルが存在する場合、事前チェックは失敗します。タスクを開始する前に、競合を解決してください。競合するテーブルを削除または名前変更できない場合は、オブジェクト名マッピング機能を使用して移行されるテーブルの名前を変更します。『オブジェクト名のマップ』をご参照ください。<br>- エラーを無視して続行: 重複するテーブル名のチェックをスキップします。注意して使用してください — この設定により、データの不整合や部分的な移行が発生する可能性があります。 |
| 宛先インスタンスでのオブジェクト名の大文字/小文字 | 宛先におけるデータベース名、テーブル名、および列名の大文字小文字の区別を制御します。デフォルトは DTS デフォルトポリシー です。詳細については、「宛先インスタンスでのオブジェクト名の大文字小文字の指定」をご参照ください。 |
| ソースオブジェクト | [ソースオブジェクト] からオブジェクトを選択し、矢印アイコンをクリックして [選択したオブジェクト] に移動します。列、テーブル、またはデータベースを選択できます。テーブルまたは列を選択すると、ビュー、トリガー、およびストアドプロシージャは除外されます。 |
| 選択したオブジェクト | 単一のオブジェクトの名前を変更するには、[選択したオブジェクト] でそのオブジェクトを右クリックします。「単一オブジェクトの名前をマッピングする」をご参照ください。複数のオブジェクトの名前を一度に変更するには、[一括編集] をクリックします。「複数のオブジェクト名を一度にマッピングする」をご参照ください。行をフィルターするには、オブジェクトを右クリックして WHERE 条件を指定します。「フィルター条件を設定する」をご参照ください。増分移行のために特定の SQL 操作を選択するには、オブジェクトを右クリックして操作を選択します。 |
オブジェクト名のマッピングは、データの不整合や、名前が変更されたオブジェクトに依存するオブジェクトの破損を引き起こす可能性があります。たとえば、列マッピングを伴う非完全なテーブル移行では、ソース列がターゲットスキーマに存在しない場合にデータ損失が発生する可能性があります。
ステップ 6: 詳細設定の構成
[次へ: 詳細設定] をクリックし、次のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用の専用クラスター | デフォルトでは、DTS はタスクを共有クラスターにスケジュールします。安定性を向上させるには、専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
| アラートの設定 | タスクの失敗またはしきい値を超える移行遅延に対してアラート機能を設定します。[はい] を選択して、アラートのしきい値と通知の連絡先を設定します。「モニタリングとアラートの設定」をご参照ください。 |
| ターゲットデータベースのエンジンタイプを選択 | ターゲット PolarDB for MySQL クラスターのストレージエンジン:InnoDB (デフォルト) または X-Engine (オンラインランザクション処理 (OLTP) ストレージエンジン)。 |
| 接続失敗時の再試行時間 | DTS が接続失敗を再試行してからタスクを失敗とマークするまでの時間。範囲:10~1440 分。デフォルト:720。少なくとも 30 分に設定してください。異なるタスクが同じソースまたはターゲットデータベースを共有する場合、最後に設定された値が適用されます。再試行中も DTS インスタンスの料金は発生します。 |
| その他の問題に対する再試行時間 | DTS が失敗した DDL または DML 操作を再試行する期間。 範囲: 1~1440 分。 デフォルト: 10。 少なくとも 10 分に設定する必要があります。 [失敗した接続の再試行時間] より小さい値にする必要があります。 |
| 完全データ移行のスロットリングを有効にする | 移行速度を制限して、ソースデータベースおよびターゲットデータベースへの負荷を軽減します。[ソースデータベースへの 1 秒あたりのクエリ数 (QPS)]、完全移行の RPS、および 完全移行のデータ移行速度 (MB/s) を設定します。「完全移行」が選択されている場合にのみ利用可能です。 |
| 増分データ移行のスロットリングを有効にする | 増分移行の速度を制限します。[増分データ移行の RPS] と [増分移行のデータ移行速度 (MB/s)] を設定します。[増分データ移行] が選択されている場合にのみ利用可能です。 |
| 環境タグ | DTS インスタンスを識別するためのオプションのタグ。 |
| ETL の設定 | データ移行中のデータ処理に抽出・変換・書き出し (ETL) を有効化します。 [はい] を選択し、コードエディタに処理ステートメントを入力します。 詳細については、「データ移行またはデータ同期タスクでの ETL の設定」をご参照ください。 |
完全なデータ移行中、DTS はソースとターゲットの両方のデータベースで読み取りおよび書き込みリソースを使用するため、サーバーの負荷が増加します。移行はオフピーク時間に実行してください。完全なデータ移行が完了した後、同時 INSERT 操作によりターゲットデータベースでテーブルの断片化が発生する可能性があるため、ターゲットの表領域はソースよりも大きくなります。
ステップ 7: 事前チェックの実行
[次へ: タスク設定を保存して事前チェック] をクリックします。
保存する前にこのタスク設定の API パラメーターをプレビューするには、[次へ: タスク設定を保存して事前チェック] にカーソルを合わせ、[OpenAPI パラメーターのプレビュー] をクリックします。
DTS は移行タスクを開始する前に事前チェックを実行します。タスクは事前チェックに合格した後にのみ開始できます。
事前チェック項目が失敗した場合、失敗した項目の横にある [詳細の表示] をクリックして原因を確認し、問題を修正して再度事前チェックを実行します。
事前チェック項目がアラートを生成した場合、シナリオに基づいて対処します。
アラートを無視できない場合は、失敗した項目の横にある [詳細の表示] をクリックし、問題をトラブルシューティングして再度事前チェックを実行します。
アラートを安全に無視できる場合は、[アラート詳細の確認] をクリックし、[詳細の表示] ダイアログボックスで [無視] をクリックし、[OK] をクリックして、[再事前チェック] をクリックします。
事前チェックのアラートを無視すると、データの不整合やその他の問題が発生する可能性があります。注意して進めてください。
ステップ 8: DTS インスタンスの購入
成功率が 100% に達するまで待ってから、[次へ: インスタンスの購入] をクリックします。
[インスタンスの購入] ページで、以下を設定します。
| セクション | パラメーター | 説明 |
|---|---|---|
| 新しいインスタンスクラス | リソースグループ設定 | 移行インスタンスのリソースグループ。デフォルト:デフォルトリソースグループResource Management とは? |
| インスタンスクラス | インスタンスクラスは移行速度を決定します。要件に応じて選択してください。詳細については、「データ移行インスタンスの仕様」をご参照ください。 |
ステップ 9: 移行タスクの開始
[Data Transmission Service (従量課金) 利用規約] チェックボックスを読んで選択し、[購入して開始] をクリックします。タスクリストでタスクの進行状況を監視します。
よくある質問
oblogproxy がインストールされていない場合、oblogproxy のフィールドにはどのような値を入力すればよいですか?
[ログプロキシの IP アドレス (ドメイン名はサポートされていません)] と [ログプロキシのポート] にはデフォルト値を使用してください。[移行タイプ] で [増分データ移行] を選択しないでください。oblogproxy がインストールされていない状態でこれを選択するとエラーが発生します。
ソース OceanBase データベースのリージョンが [インスタンスリージョン] のドロップダウンリストにありません。何を選択すればよいですか?
ソース OceanBase データベースが配置されている場所に最も近いリージョンを選択してください。
ソース OceanBase データベースはクラスターにデプロイされています。[ドメイン名または IP] には何を入力すればよいですか?
クラスターを作成したときに [OBServer ノード] に指定した値を入力してください。
ソース OceanBase データベースの [ポート番号] には何を入力すればよいですか?
スタンドアロンデプロイメント:デフォルト値 (2881) を使用します。
クラスターデプロイメント:クラスターを作成したときに [SQL ポート] に指定した値を入力します。
ソース OceanBase データベースの [データベースアカウント] はどのようなフォーマットを使用しますか?
<ユーザー名>@<テナント名> のフォーマットを使用してください。たとえば、ユーザーがテナント dts の dtstest である場合、dtstest@dts と入力します。