Data Transmission Service (DTS) を使用して、MySQL データベースから Lindorm インスタンスの LindormTable エンジンにデータを同期できます。このトピックでは、ApsaraDB RDS for MySQL インスタンスをソースとして使用します。
前提条件
開始する前に、次のことを確認してください。
-
移行先 Lindorm インスタンスで LindormTable エンジンが有効になっており、ストレージ容量がソースの RDS for MySQL インスタンスの使用済みストレージより大きい必要があります。詳細については、「インスタンスの作成」をご参照ください。
-
移行先 Lindorm インスタンスで MySQL 互換エンドポイントが有効になっている必要があります。詳細については、「MySQL 互換機能の有効化」をご参照ください。
-
移行先の Lindorm インスタンスにデータベース (名前空間) を事前に作成しておく必要があります。スキーマ同期 を選択しない場合は、ワイドテーブルも事前に作成する必要があります (パフォーマンス向上のため、同期開始前に全データセットに基づいて事前パーティショニングすることを推奨します)。詳細については、「MySQL コマンドラインを使用した LindormTable への接続と使用」、「Lindorm-cli を使用した LindormTable への接続と使用」、「Lindorm Shell を使用した LindormTable へのアクセス」、「CREATE TABLE」、および「データ型のマッピング」をご参照ください。
-
移行先 Lindorm インスタンスのすべてのオブジェクトが、「Lindorm の命名規則と制限」に準拠している必要があります。
課金
|
同期タイプ |
料金 |
|
完全データ同期 |
無料 |
|
増分データ同期 |
有料。詳細については、「課金概要」をご参照ください。 |
増分同期がサポートするSQL操作
|
タイプ |
SQL ステートメント |
|
DML |
INSERT、UPDATE、DELETE |
|
DDL |
CREATE TABLE、DROP TABLE、ADD COLUMN |
ADD COLUMN ステートメントに追加の属性が含まれている場合、列定義のみが同期され、デフォルト値などの属性は削除されます。たとえば、ソースで ALTER TABLE test ADD COLUMN col INT DEFAULT 0; を実行した場合、LindormTable の制限により、デスティネーションでは ALTER TABLE test ADD COLUMN col INT; となります。
データベースアカウントに必要な権限
|
データベース |
必要な権限 |
付与方法 |
|
ソース RDS MySQL |
同期対象のオブジェクトの読み取りおよび書き込み権限 |
|
|
ターゲット Lindorm |
ターゲット名前空間の読み取りおよび書き込み権限 |
「ユーザー管理」 |
ソースデータベースアカウントが RDS for MySQL コンソールで作成・権限付与されていない場合は、そのアカウントに REPLICATION CLIENT、REPLICATION SLAVE、SHOW VIEW、および SELECT の権限があることを確認してください。
制限事項
ソースデータベースの制限
-
同期対象のテーブルには、一意なフィールドを持つプライマリキーが必要です。プライマリキーがない場合、ターゲットに重複データが発生する可能性があります。
-
FLOAT や DOUBLE などの浮動小数点型は、プライマリキーまたは複合プライマリキーとしてサポートされていません。
-
名前マッピングを使用してテーブルレベルで同期する場合、1 つのタスクで同期できるテーブルは最大 1,000 です。この制限を超えると、タスク送信後にエラーが発生します。テーブルを複数のタスクに分割するか、データベース全体を同期するようにタスクを構成してください。
-
フルデータ同期フェーズ中は、ソースデータベースに対して DDL 操作を実行しないでください。実行すると、タスクが失敗します。Data Transmission Service (DTS) のクエリはメタデータロックを追加するため、このフェーズ中にソースでの DDL 操作がブロックされる可能性があります。
-
物理バックアップリカバリやカスケード操作など、バイナリログに記録されない操作によるデータ変更は、ターゲットに同期されません。この問題が発生し、業務上許容される場合は、影響を受けたデータベースまたはテーブルを同期オブジェクトから削除してから、再度追加してください。詳細については、「同期オブジェクトの変更」をご参照ください。
-
MySQL 8.0.23 以降では、不可視カラムが存在すると、DTS がそれらを読み取れないため、データ損失が発生します。同期を開始する前に、不可視カラムを可視化してください。
-
不可視カラムごとに
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET VISIBLE;を実行します。詳細については、「Invisible Columns」をご参照ください。 -
プライマリキーのないテーブルは、不可視のプライマリキーを自動生成します。これも可視化してください。詳細については、「Generated Invisible Primary Keys」をご参照ください。
-
バイナリログの要件
ApsaraDB RDS for MySQL をソースとする場合
RDS MySQL インスタンスでは、バイナリログがデフォルトで有効化されています。以下のパラメータが正しく設定されていることを確認してください。
|
パラメータ |
必要な値 |
備考 |
|
|
|
正しく設定されていない場合、事前チェックでエラーが報告され、タスクを開始できません。詳細については、「インスタンスパラメータの設定」をご参照ください。 |
ローカルバイナリログは、少なくとも 3 日間 (7 日間を推奨します) 保持してください。保持期間が短いと、タスクが失敗する可能性があり、極端な場合にはデータ損失または不整合が発生します。保持期間不足に起因する問題は、DTS のサービスレベル契約 (SLA) の対象外です。詳細については、「ローカルログの自動削除」をご参照ください。
セルフマネージド MySQL をソースとする場合
バイナリログを有効化し、以下のパラメータを設定してください。
|
パラメータ |
必要な値 |
備考 |
|
|
|
DTS が行レベルの変更をキャプチャするために必要です。 |
|
|
|
各変更の完全な行イメージをキャプチャするために必要です。 |
|
|
有効 |
プライマリ/プライマリアーキテクチャの場合にのみ必要です。DTS がすべてのバイナリログを取得できるようにします。詳細については、「セルフマネージド MySQL データベースのデータベースアカウントの作成とバイナリログの設定」をご参照ください。 |
ローカルバイナリログは、少なくとも 7 日間保持してください。保持期間が短いと、タスクが失敗する可能性があり、極端な場合にはデータ損失または不整合が発生します。保持期間不足に起因する問題は、DTS SLA の対象外です。
その他の制限
|
制限 |
詳細 |
|
スキーマ同期 |
Lindorm へのスキーマ同期は、Lindorm 自体のスキーマ作成機能に依存します。 |
|
非プライマリキーカラムのインデックス制限 |
Lindorm には、非プライマリキーカラムのインデックスに対するデフォルトのカラム数制限があります。カラム数がこの制限を超える場合、DTS はスキーマ同期中にそのようなインデックスを作成できません。このようなインデックスを使用するには、手動で作成してください。詳細については、「ALTER SYSTEM」をご参照ください。 |
|
サポートされていないオブジェクトタイプ |
INDEX、PARTITION、VIEW、PROCEDURE、FUNCTION、TRIGGER、および FK オブジェクト。 |
|
BIT 型データ |
サポートされていません。 |
|
プライマリキーのみの同期 |
サポートされていません。同期対象のデータには、少なくとも 1 つの非プライマリキーフィールドを含める必要があります。 |
|
ターゲットエンジン |
LindormTable エンジンのみがサポートされています。 |
|
空の VARBINARY 文字列 |
DTS と Lindorm の両方で null として扱われます。 |
|
DECIMAL フィールドの精度の不一致 |
ターゲットの DECIMAL フィールドの精度がソースと異なる場合、タスクは失敗します。 |
|
Lindorm データリクエストの制限 |
Lindorm に書き込まれるデータは、「データリクエストの制限」を満たす必要があります。これを超えると、タスクが失敗します。 |
|
フル同期中のリソース使用 |
フルデータ同期は、ソースデータベースとターゲットデータベースの両方で読み取りおよび書き込みリソースを消費します。両方のインスタンスで CPU 使用率が 30% 未満のオフピーク時に同期を実行してください。 |
|
フル初期化後のターゲットテーブルスペース |
フル初期化では並列 INSERT 操作が実行されるため、テーブルの断片化が発生します。フル初期化後、ターゲットのテーブルスペースはソースよりも大きくなります。 |
|
同期中のオンライン DDL ツール |
DTS タスクの実行中に、pt-online-schema-change などのツールを使用して同期対象のオブジェクトに対してオンライン DDL 操作を実行しないでください。実行すると、タスクが失敗します。 |
|
ターゲットへの外部書き込み |
同期中に DTS 以外のソースからターゲットデータベースにデータを書き込むと、データの不整合が発生します。 |
|
EncDB (常時機密) 機能 |
ソース RDS for MySQL インスタンスで EncDB 機能が有効化されている場合、フルデータ同期はサポートされません。Transparent Data Encryption (TDE) にはこの制限はありません。TDE が有効化されているインスタンスは、スキーマ同期、フルデータ同期、および増分データ同期をサポートします。 |
|
DTS インスタンスの復旧 |
DTS インスタンスに障害が発生した場合、DTS ヘルプデスクは 8 時間以内に復旧を試みます。復旧中、DTS はインスタンスを再起動したり、DTS インスタンスパラメータ (データベースパラメータではありません) を調整したりする場合があります。詳細については、「インスタンスパラメータの変更」をご参照ください。 |
特殊なケース
セルフマネージド MySQL をソースとする場合
-
同期中にソースデータベースでプライマリ/セカンダリフェイルオーバーが発生すると、タスクは失敗します。
-
レイテンシーは、現在時刻とターゲットに同期された最後のレコードのタイムスタンプの差から計算されます。長期間にわたってソースで DML 操作が実行されない場合、表示されるレイテンシーは不正確になる可能性があります。レイテンシーを更新するには、ソースで DML 操作を実行してください。または、ハートビートテーブルを作成してください。データベース全体を同期する場合、DTS は 1 秒ごとにハートビートテーブルに書き込みます。
-
DTS は定期的にソースで
CREATE DATABASE IF NOT EXISTS `test`を実行し、バイナリログオフセットを進めます。 -
Amazon Aurora MySQL やその他のクラスターモード MySQL インスタンスの場合、タスクに設定されたドメイン名または IP アドレスが、常に読み取り/書き込み (RW) ノードに解決されるようにしてください。そうでない場合、タスクが正しく実行されない可能性があります。
ApsaraDB RDS for MySQL をソースとする場合
-
ApsaraDB RDS for MySQL 5.6 の読み取り専用インスタンスは、トランザクションログを記録しないため、ソースとして使用できません。
-
DTS は定期的にソースで
CREATE DATABASE IF NOT EXISTS `test`を実行し、バイナリログオフセットを進めます。
同期タスクの設定
ステップ 1: データ同期ページを開く
Data Transmission Service (DTS) コンソールまたは DMS コンソールのいずれかを使用します。
DTS コンソール
DMS コンソール
実際の手順は、DMS コンソールのモードとレイアウトによって異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」を参照してください。
ステップ 2: ソースデータベースと宛先データベースの設定
-
[タスクの作成] をクリックします。
-
次の表のパラメーターに従って、ソースデータベースと宛先データベースを設定します。
|
カテゴリ |
パラメーター |
説明 |
|
該当なし |
タスク名 |
DTS タスクを識別するための分かりやすい名前です。DTS は自動的に名前を生成しますが、タスクを識別しやすい名前に置き換えることを推奨します。タスク名は一意である必要はありません。 |
|
ソースデータベース |
既存の接続を選択 |
DTS に登録済みのデータベースインスタンスがある場合は、ドロップダウンリストから選択します。DTS によって残りのパラメーターが自動的に入力されます。DMS コンソールで、[DMS データベースインスタンスの選択] リストから選択します。それ以外の場合は、以下のパラメーターを手動で設定します。 |
|
データベースタイプ |
[MySQL] に設定します。 |
|
|
[アクセス方法] |
[Alibaba Cloud インスタンス] に設定します。 |
|
|
インスタンスリージョン |
ソース RDS MySQL インスタンスのリージョンを選択します。 |
|
|
Alibaba Cloud アカウント間でデータをレプリケート |
ソースデータベースが現在の Alibaba Cloud アカウントに属する場合は、[いいえ] を選択します。 |
|
|
RDS インスタンス ID |
ソース RDS MySQL インスタンスの ID を選択します。 |
|
|
データベースアカウント |
データベースアカウントを入力します。必要な権限については、「データベースアカウントに必要な権限」を参照してください。 |
|
|
データベースパスワード |
データベースアカウントのパスワード。 |
|
|
暗号化 |
要件に応じて [非暗号化] または [SSL 暗号化] を選択します。 SSL 暗号化を使用するには、DTS タスクを設定する前に RDS for MySQL インスタンスで有効にする必要があります。 詳細については、「クラウド証明書を使用して SSL 暗号化を有効にする」をご参照ください。 |
|
|
宛先データベース |
既存の接続を選択 |
DTS に登録済みのデータベースインスタンスがある場合は、DMS コンソールの [DMS データベースインスタンスの選択] ドロップダウンリストから選択すると、DTS によって残りのパラメーターが自動的に入力されます。それ以外の場合は、以下のパラメーターを手動で設定します。 |
|
データベースタイプ |
[Lindorm] に設定します。 |
|
|
[アクセス方法] |
[Alibaba Cloud インスタンス] に設定します。 |
|
|
インスタンスリージョン |
宛先 Lindorm インスタンスのリージョンを選択します。 |
|
|
インスタンス ID |
宛先 Lindorm インスタンスの ID を選択します。 |
|
|
データベースアカウント |
宛先 Lindorm インスタンスのデータベースアカウントを入力します。必要な権限については、「データベースアカウントに必要な権限」を参照してください。 |
|
|
データベースパスワード |
データベースアカウントのパスワード。 |
-
[接続をテストして続行] をクリックします。
説明DTS サーバーの IP アドレスを、送信元データベースと宛先データベースの両方のセキュリティ設定に追加する必要があります。この操作は自動または手動で行うことができます。「DTS サーバーの IP アドレスをホワイトリストに追加する」をご参照ください。送信元または宛先が自己管理型データベースで、アクセス方法が [Alibaba Cloud インスタンス] 以外の場合は、[DTS サーバーの CIDR ブロック] ダイアログボックスで [接続テスト] をクリックします。
ステップ 3: 同期オブジェクトの設定
[オブジェクトの設定] ステップでは、次のパラメーターを設定します。
|
パラメーター |
説明 |
|
[同期タイプ] |
[増分データ同期] はデフォルトで選択されています。 必要に応じて [完全データ同期] も選択します。 [スキーマ同期] は利用できません。 完全データ同期を有効にすると、DTS は増分同期を開始する前に、ソースから宛先へ履歴データを同期します。 |
|
[競合するテーブルの処理モード] |
デフォルト値のままにします。 |
|
[宛先インスタンスのオブジェクト名の大文字と小文字] |
移行先のデータベース名、テーブル名、および列名の大文字/小文字の区別を制御します。デフォルトは [DTS デフォルトポリシー] です。大文字/小文字の区別を移行元または移行先に一致させる必要がある場合は、別のオプションを選択してください。詳細は、「移行先インスタンスでのオブジェクト名の大文字/小文字の区別を指定する」をご参照ください。 |
|
[ソースオブジェクト] |
同期するデータベースまたはテーブルを選択し、 |
|
[選択済みオブジェクト] |
宛先 Lindorm インスタンスのデータベース、テーブル、またはカラムの名前がソース RDS MySQL インスタンスと異なる場合は、オブジェクト名マッピングを使用します。詳細については、「テーブル名とカラム名のマッピング」を参照してください。 説明
名前マッピングでオブジェクトの名前を変更すると、依存オブジェクトの同期が失敗する可能性があります。行をフィルターするには、[選択したオブジェクト] 内のテーブルを右クリックし、WHERE 条件を指定します。詳細については、「フィルター条件の指定」をご参照ください。増分同期のために特定の SQL 操作を選択するには、オブジェクトを右クリックし、含める操作を選択します。 |
ステップ 4: 詳細設定
[次へ:詳細設定] をクリックし、次のパラメーターを設定します。
|
パラメーター |
説明 |
|
[タスクスケジューリング専用クラスター] |
DTS はデフォルトで共有クラスターにタスクを割り当てます。より高い安定性を得るには、専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは」を参照してください。 |
|
[接続失敗時の再試行時間] |
接続失敗後に DTS が再試行する期間。有効な値:10〜1440 分。デフォルト:720 分。この値は少なくとも 30 分に設定してください。この期間内に DTS が再接続すると、タスクは自動的に再開されます。それ以外の場合はタスクは失敗します。 説明
複数のタスクが同じソースまたは宛先を共有する場合、最短の再試行期間が優先されます。DTS は再試行期間中もインスタンスに対して課金されるため、ビジネスニーズに基づいてこの値を設定してください。 |
|
[その他の問題の再試行時間] |
DDL または DML 操作が失敗した後の DTS の再試行時間。有効値: 1~1440 分。デフォルト値: 10 分。10 分を超える値を設定することをお勧めします。この値は、[接続失敗の再試行時間] より小さくする必要があります。 |
|
[全量データ同期のスロットリングを有効化] |
完全データ同期を調整して、移行先の負荷を軽減します。[移行元データベースへの 1 秒あたりのクエリ数 (QPS)]、[完全データ移行の RPS]、および [完全移行のデータ移行速度 (MB/s)] を設定します。[完全データ同期] が選択されている場合にのみ使用できます。 |
|
[増分データ同期のスロットリングを有効化] |
増分データ同期をスロットリングします。[増分データ同期の RPS] と [増分同期のデータ同期速度 (MB/s)] を設定します。 |
|
[環境タグ] |
インスタンス環境を識別するためのオプションのタグ。 |
|
[フォワードタスクとリバースタスクのハートビートテーブルの SQL 操作を削除するかどうか] |
DTS がソースデータベースにハートビート SQL 操作を書き込むかどうかを制御します。[はい]アラート通知設定を選択すると、書き込みがスキップされます (インスタンスにレイテンシー値が表示される場合があります)。[いいえ]を選択すると、ハートビート操作が書き込まれます (ソースデータベースの物理バックアップやクローニングに影響する場合があります)。 |
|
[ETL の設定] |
[はい] を選択すると、抽出、変換、ロード (ETL) 機能が有効になり、データ処理ステートメントを入力できます。「ETL とは」および「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。スキップする場合は、[いいえ] を選択します。 |
|
[モニタリングとアラート] |
タスクが失敗した場合、またはレイテンシーがしきい値を超えた場合に通知を受信するには、[はい] を選択します。 アラートのしきい値と通知設定を構成します。 詳細については、「DTS タスクの作成時にモニタリングとアラートを設定する」をご参照ください。 アラートを無効にするには、[いいえ] を選択します。 |
ステップ 5: 事前チェックの実行
[次へ: タスク設定の保存と事前チェック] をクリックします。
このタスク設定の API パラメーターをプレビューするには、次に進む前に [次へ: タスク設定の保存と事前チェック] にカーソルを合わせ、[OpenAPI パラメーターのプレビュー] をクリックします。
DTS はタスクを開始する前に事前チェックを実行します。事前チェック項目が失敗した場合:
-
失敗した項目の横にある[詳細の表示]をクリックし、原因を分析して問題を修正し、[再事前チェック]をクリックします。
-
アラート項目を無視できない場合、失敗した項目の横にある[詳細の表示]をクリックし、問題をトラブルシューティングし、事前チェックを再実行します。
-
アラート項目を無視できる場合は、[アラート詳細の確認] をクリックし、詳細ダイアログで [無視] をクリックし、[OK] をクリックしてから、[再事前チェック] をクリックします。アラート項目を無視すると、データ不整合が発生する可能性があります。
ステップ 6: インスタンスの購入
-
[成功率] が [100%] に達するまで待ち、[次へ: インスタンスの購入] をクリックします。
-
購入ページで、次のパラメーターを設定します。
|
パラメーター |
説明 |
|
[課金方法] |
[サブスクリプション]: 固定期間分を前払いします。長期利用の場合、よりコスト効率が高くなります。従量課金: 時間単位で請求されます。短期利用に適しています。不要になったインスタンスをリリースすることで課金を停止できます。 |
|
[リソースグループ設定] |
インスタンスのリソースグループ。デフォルト: [デフォルトリソースグループ]。詳細については、「リソース管理とは」をご参照ください。 |
|
[インスタンスクラス] |
同期速度はインスタンスクラスによって異なります。要件に基づいて選択してください。詳細については、「データ同期インスタンスのインスタンスクラス」を参照してください。 |
|
[サブスクリプション期間] |
サブスクリプション課金方法でのみ使用できます。オプション:1〜9 か月、1 年、2 年、3 年、または 5 年。 |
-
[データ転送サービス (従量課金) 利用規約] を読み、選択します。
-
[購入して開始] をクリックし、確認ダイアログで [OK] をクリックします。
タスクがタスクリストに表示されます。タスクリストで進捗状況を監視します。