Data Transmission Service (DTS) を使用して、MySQL データベースから Lindorm インスタンスの LindormTable エンジンへデータを同期できます。本トピックでは、ソースとして ApsaraDB RDS for MySQL インスタンスを使用します。
前提条件
開始する前に、以下を満たしていることを確認してください。
LindormTable エンジンが有効化されており、ストレージ容量がソース ApsaraDB RDS for MySQL インスタンスの使用済みストレージよりも大きい宛先 Lindorm インスタンスを用意してください。「インスタンスの作成」をご参照ください。
宛先 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; となります。
データベースアカウントに必要な権限
データベース | 必要な権限 | 付与方法 |
ソース ApsaraDB RDS for MySQL | 同期対象オブジェクトの読み取りおよび書き込み権限 | |
宛先 Lindorm | 宛先名前空間の読み取りおよび書き込み権限 |
ソースデータベースアカウントが ApsaraDB RDS for MySQL コンソールを通じて作成および権限付与されていない場合、そのアカウントに REPLICATION CLIENT、REPLICATION SLAVE、SHOW VIEW、および SELECT 権限があることを確認してください。
制限事項
ソースデータベースの制限
同期対象のテーブルには、一意のフィールドを持つプライマリーキーが必要です。プライマリーキーがない場合、宛先に重複データが発生する可能性があります。
FLOAT や DOUBLE などの浮動小数点型は、プライマリーキーまたは複合プライマリーキーとしてサポートされていません。
名前マッピングを使用してテーブルレベルで同期する場合、1 つのタスクで最大 1,000 テーブルをサポートします。この制限を超えると、タスク送信後にエラーが発生します。テーブルを複数のタスクに分割するか、データベース全体を同期するようにタスクを設定してください。
完全データ同期フェーズ中は、ソースデータベースで DDL 操作を実行しないでください。タスクが失敗する原因となります。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 ソース
ApsaraDB RDS for MySQL インスタンスでは、バイナリログがデフォルトで有効になっています。以下のパラメータが正しく設定されていることを確認してください。
パラメータ | 必要な値 | 備考 |
|
| 正しく設定されていない場合、事前チェックでエラーが報告され、タスクを開始できません。「インスタンスパラメータの設定」をご参照ください。 |
ローカルバイナリログは少なくとも 3 日間 (推奨は 7 日間) 保持してください。保持期間が短いと、タスクが失敗し、極端な場合にはデータ損失や不整合が発生する可能性があります。保持期間不足に起因する問題は、サービスレベルアグリーメント (SLA) の対象外となります。「ローカルログの自動削除」をご参照ください。
セルフマネージド MySQL ソース
バイナリログを有効化し、以下のパラメータを設定してください。
パラメータ | 必要な値 | 備考 |
|
| DTS が行レベルの変更をキャプチャするために必要です。 |
|
| 各変更の完全な行イメージをキャプチャするために必要です。 |
| 有効 | プライマリー/プライマリーアーキテクチャでのみ必要です。DTS がすべてのバイナリログを取得できるようにするために必要です。「セルフマネージド MySQL データベースのデータベースアカウントの作成とバイナリログの設定」をご参照ください。 |
ローカルバイナリログは少なくとも 7 日間保持してください。保持期間が短いと、タスクが失敗し、極端な場合にはデータ損失や不整合が発生する可能性があります。保持期間不足に起因する問題は、DTS SLA の対象外となります。
その他の制限
制限 | 詳細 |
スキーマ同期 | サポートされていません。 |
サポートされていないオブジェクトタイプ | 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 (常時機密) 機能 | ソース ApsaraDB RDS for MySQL インスタンスで EncDB 機能が有効になっている場合、完全データ同期はサポートされません。Transparent Data Encryption (TDE) にはこの制限はありません。TDE が有効なインスタンスは、スキーマ同期、完全データ同期、および増分データ同期をサポートします。 |
DTS インスタンスの復旧 | DTS インスタンスに障害が発生した場合、DTS ヘルプデスクは 8 時間以内に復旧を試みます。復旧中、DTS はインスタンスを再起動するか、DTS インスタンスパラメータ (データベースパラメータではありません) を調整する場合があります。「インスタンスパラメータの変更」をご参照ください。 |
特殊なケース
セルフマネージド MySQL ソース
同期中にソースデータベースでプライマリー/セカンダリーフェイルオーバーが発生すると、タスクは失敗します。
レイテンシは、現在時刻と宛先に同期された最後のレコードのタイムスタンプの差から計算されます。ソースで長期間 DML 操作が実行されない場合、表示されるレイテンシは不正確になる可能性があります。レイテンシを更新するには、ソースで DML 操作を実行してください。あるいは、ハートビートテーブルを作成してください。データベース全体を同期する場合、DTS は毎秒そこに書き込みます。
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: データ同期ページを開く
DTS コンソールまたは DMS コンソールのいずれかを使用します。
DTS コンソール
DMS コンソール
実際の手順は、DMS コンソールのモードとレイアウトによって異なる場合があります。「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
ステップ 2: ソースおよび宛先データベースの設定
[タスクの作成] をクリックします。
以下の表のパラメータを使用して、ソースおよび宛先データベースを設定します。
カテゴリ | パラメータ | 説明 |
該当なし | タスク名 | DTS タスクのわかりやすい名前です。DTS は自動的に名前を生成しますが、タスクを識別しやすい名前に置き換えることを推奨します。タスク名は一意である必要はありません。 |
ソースデータベース | 既存の接続を選択 | DTS に登録済みのデータベースインスタンスがある場合は、DMS コンソールで [DMS データベースインスタンスの選択] リストから選択します。DTS が残りのパラメーターを自動入力します。それ以外の場合は、以下のパラメーターを手動で設定します。 |
データベースタイプ | [MySQL] に設定します。 | |
[アクセス方法] | [Alibaba Cloud インスタンス] に設定します。 | |
インスタンスリージョン | ソース ApsaraDB RDS for MySQL インスタンスのリージョンを選択します。 | |
Alibaba Cloud アカウント間でのデータ複製 | ソースデータベースが現在の Alibaba Cloud アカウントに属している場合は、[いいえ] を選択します。 | |
RDS インスタンス ID | ソース ApsaraDB RDS for 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 インスタンスのデータベース、テーブル、またはカラムの名前がソース ApsaraDB RDS for 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] をクリックします。
タスクがタスクリストに表示されます。タスクリストで進行状況を監視してください。