クエリのオフロード、リアルタイム分析、マルチモデルアクセスなど、高スループットの NoSQL ストアを用いて MySQL データにリアルタイムでアクセスする必要がある場合、手動によるデータ複製はエラーが発生しやすく、保守も困難です。Data Transmission Service (DTS) はこの同期処理を自動化します。DTS は、ApsaraDB RDS for MySQL インスタンス(または自己管理 MySQL データベース)から Tablestore インスタンスへ、一度だけ実行される完全データのロードと、その後継続的に実行される変更データのレプリケーションを行い、カスタムコードなしで両ストアを常に同期状態に保ちます。
前提条件
開始前に、以下の条件を満たしていることを確認してください。
Tablestore インスタンス。設定方法については、「Tablestore の使用」をご参照ください。
Tablestore インスタンスを所有する Alibaba Cloud アカウントの AccessKey ID および AccessKey Secret。手順については、「Alibaba Cloud アカウント向け AccessKey ペアの作成」をご参照ください。
制限事項
タスクの構成を開始する前に、これらの制限事項を理解しておくことで、事前チェックの失敗や同期中のエラーを回避できます。
ソースデータベースの制限事項
| 制限事項 | トリガーおよび影響 | 回避策 |
|---|---|---|
| プライマリキーまたは一意制約が必要 | PRIMARY KEY または UNIQUE 制約がないテーブルでは、Tablestore に重複レコードが生成されます。 | タスク開始前に、各テーブルにプライマリキーまたは一意キーを追加してください。 |
| 1 タスクあたり最大 1,000 テーブル(テーブルを同期対象として選択する場合) | 1,000 を超えるテーブルを選択すると、リクエストエラーが発生し、タスクを開始できません。 | 複数のタスクを作成するか、テーブルを個別に選択する代わりに、データベース全体を同期してください。 |
binlog_row_image は full | この値が full でない場合、事前チェックに失敗し、タスクを開始できません。 | ApsaraDB RDS for MySQL の場合は、「インスタンスのパラメーターを変更する」をご参照ください。 |
| バイナリログの保持期間は最低 7 日間 | 保持期間が短いと、同期中にタスクが失敗します。場合によってはデータ損失が発生する可能性があります。 | タスクを開始する前に、バイナリログの保存期間を延長してください。詳細については、「バイナリログファイルを管理する」をご参照ください。 |
| スキーマ同期および完全データ同期中の DDL 実行不可 | これらのフェーズ中に DDL ステートメントを実行すると、タスクが失敗します。 | 両フェーズが完了するまで、スキーマ変更を一時停止してください。 |
| 不可視カラム(MySQL 8.0.23 以降) | DTS は不可視カラム内のデータを読み取れず、データ損失が発生します。明示的なプライマリキーがないテーブルでは、不可視のプライマリキーが自動生成されますが、これも DTS では読み取れません。 | 開始前に、ALTER TABLE <table_name> ALTER COLUMN <column_name> SET VISIBLE; を実行してカラムを可視化してください。「不可視カラム」および「生成された不可視プライマリキー」をご参照ください。 |
| EncDB 機能 | EncDB 機能が有効化された ApsaraDB RDS for MySQL インスタンスでは、完全データ同期はサポートされていません。 | EncDB を無効化するか、EncDB を使用していないインスタンスを使用してください。透過的データ暗号化(TDE)が有効化されたインスタンスでは、スキーマ同期、完全同期、増分同期のすべての同期タイプがサポートされます。 |
自己管理 MySQL の追加要件:
バイナリロギングを有効化し、
binlog_formatをrowに、binlog_row_imageをfullに設定します。詳細については、「自己管理 MySQL データベース用のアカウントを作成してバイナリロギングを設定する」をご参照ください。デュアルプライマリクラスターでは、DTS がすべてのバイナリログをキャプチャできるよう、
log_slave_updatesをONに設定してください。タスク実行中にプライマリ/セカンダリ スイッチオーバーを実行すると、タスクが失敗します。
DTS は、バイナリログファイルの位置を進めるために、予定通りにソースデータベースで
CREATE DATABASE IF NOT EXISTS 'test'ステートメントを実行します。
ApsaraDB RDS for MySQL の追加要件:
トランザクションログを記録しない ApsaraDB RDS for MySQL インスタンス(例:読み取り専用の ApsaraDB RDS for MySQL 5.6 インスタンス)は、ソースデータベースとして使用できません。
DTS は、バイナリログファイルの位置を進めるために、予定通りにソースデータベースで
CREATE DATABASE IF NOT EXISTS 'test'ステートメントを実行します。
ターゲットデータベースの制限事項
| 制限事項 | トリガーおよび影響 | 回避策 |
|---|---|---|
| Tablestore インスタンスあたり最大 64 テーブル | 64 を超えるテーブルを同期すると、リクエストエラーが発生します。 | 制限の引き上げについては、Tablestore のテクニカルサポートにお問い合わせください。 |
| Tablestore の命名規則 | テーブル名およびカラム名が命名規則に違反すると、タスクが失敗します。名前には英字、数字、アンダースコア(_)のみを使用でき、先頭は英字またはアンダースコアで始める必要があります。また、長さは 1~255 文字である必要があります。 | タスク開始前に、規則に準拠しないテーブルおよびカラムの名前を変更してください。 |
一般的な制限事項
| 制限事項 | 影響 | 推奨事項 |
|---|---|---|
| 同期実行中に、他のソースから送信先へデータが書き込まれる場合 | ソースと送信先の間でデータ不整合が発生します。 | タスク実行中は、DTS を経由したみ書き込みを許可してください。 |
| 同期対象オブジェクトに対するオンライン DDL 操作(例:`pt-online-schema-change` など) | タスクが失敗します。 | 同期中のオブジェクトに対してオンライン DDL 操作を実行しないでください。 |
| 初期フル同期中の並列 INSERT 操作 | テーブルの断片化が発生し、このフェーズ終了後に送信先の表領域がソースより大きくなります。 | 送信先のストレージ容量を、この点を踏まえて計画してください。 |
| バイナリログの変更操作から取得されたデータ(物理バックアップからの復元またはカスケード操作によって生成されたもの) | このデータは送信先に同期されません。 | 同期対象オブジェクトの変更影響を受けるテーブルを同期対象から除外し、その後再登録してください。詳細については、「」をご参照ください。 |
ソースおよびターゲットデータベースへのパフォーマンスへの影響を軽減するため、非ピーク時間帯に同期を実行してください。
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期および完全データ同期 | 無料 |
| 増分データ同期 | 有料。詳細については、「課金概要」をご参照ください。 |
増分同期でサポートされる SQL 操作
| 操作タイプ | SQL ステートメント |
|---|---|
| DML | INSERT、UPDATE、DELETE |
必要な権限
ソースの ApsaraDB RDS for MySQL インスタンスのデータベースアカウントには、同期対象オブジェクトに対する読み取りおよび書き込み権限が必要です。
アカウントの作成については、「アカウントの作成」をご参照ください。
既存アカウントの権限を調整する場合は、「アカウントの権限の変更」をご参照ください。
ApsaraDB RDS for MySQL コンソール経由でアカウントを作成しなかった場合は、以下の権限を手動で付与してください。
REPLICATION CLIENTREPLICATION SLAVESHOW VIEWSELECT
データ同期タスクの作成
タスクの構成には、以下の 9 ステップがあります:データ同期ページへの移動、タスクの作成、ソースおよびターゲットデータベースの構成、接続性のテスト、同期対象の選択、高度な設定の構成、プライマリキー列のマッピング、事前チェックの実行、インスタンスの購入です。
ステップ 1:データ同期ページへ移動
DTS コンソールまたは DMS コンソールを開き、データ同期ページへ移動します。
DTS コンソール
DTS コンソール にログインします。
左側のナビゲーションウィンドウで、データ同期 をクリックします。
ページの左上隅で、データ同期インスタンスが存在するリージョンを選択します。
DMS コンソール
実際の操作は、DMS コンソールのモードおよびレイアウトによって異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
DMS コンソール にログインします。
上部のナビゲーションバーで、Data + AI の上にポインターを合わせ、 を選択します。
データ同期タスク の右側にあるドロップダウンリストから、データ同期インスタンスが存在するリージョンを選択します。
ステップ 2:タスクの作成
タスクの作成 をクリックして、タスク構成ページを開きます。
(任意)プロンプトが表示された場合は、右上隅の 新規構成ページ をクリックします。
前のバージョンに戻る ボタンが表示されている場合は、このステップをスキップしてください。新旧の構成ページでは、特定のパラメーターが異なる場合があります。新規バージョンの使用を推奨します。
ステップ 3:ソースおよびターゲットデータベースの構成
ソースの ApsaraDB RDS for MySQL インスタンスおよびターゲットの Tablestore インスタンスの接続情報を構成します。
| セクション | パラメーター | 説明 |
|---|---|---|
| 該当なし | タスク名 | DTS が自動的に名前を生成します。タスクを識別しやすくするために、意味のある名前を指定してください。タスク名は一意である必要はありません。 |
| ソースデータベース | DMS データベースインスタンスを選択 | Alibaba Cloud データベースインスタンスの登録サードパーティのクラウドサービスでホストされているデータベース、または自己管理データベースの登録既に登録済みのデータベースを選択するか、接続情報を手動で設定してください。既存のデータベースを選択した場合、DTS がパラメーターを自動的に入力します。Alibaba Cloud のデータベースインスタンスを登録するには、「」をご参照ください。自己管理データベースまたはサードパーティクラウドサービス上のデータベースを登録するには、「」をご参照ください。 |
| データベースタイプ | MySQL を選択します。 | |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 | |
| インスタンスリージョン | ソースの ApsaraDB RDS for MySQL インスタンスが配置されているリージョンです。 | |
| Alibaba Cloud アカウント間でのデータ複製 | 現在の Alibaba Cloud アカウント内のデータベースを使用する場合は、いいえ を選択します。 | |
| RDS インスタンス ID | ソースの ApsaraDB RDS for MySQL インスタンスの ID です。 | |
| データベースアカウント | データベースアカウントです。「必要な権限」で、このアカウントに必要な権限をご確認ください。 | |
| データベースパスワード | データベースアカウントのパスワードです。 | |
| 暗号化 | 暗号化なし または SSL 暗号化クラウド証明書を使用して SSL暗号化を有効にする を選択します。SSL 暗号化を利用する場合は、事前に ApsaraDB RDS for MySQL インスタンスで SSL 暗号化を有効化してください。「」をご参照ください。 | |
| 送信先データベース | DMS データベースインスタンスを選択 | 既に登録済みのデータベースを選択するか、接続情報を手動で設定してください。データベースの登録については、上記「ソースデータベース」のリンクをご参照ください。 |
| データベースタイプ | Tablestore を選択します。 | |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 | |
| インスタンスリージョン | 送信先の Tablestore インスタンスが配置されているリージョンです。 | |
| インスタンス ID | 送信先の Tablestore インスタンスの ID です。 | |
| Alibaba Cloud アカウントの AccessKey ID | Tablestore インスタンスを所有する Alibaba Cloud アカウントの AccessKey ID です。RAM ユーザーの AccessKey ID を使用すると、必要な権限が不足している場合、タスクが失敗する可能性があります。 | |
| Alibaba Cloud アカウントの AccessKey Secret | Tablestore インスタンスを所有する Alibaba Cloud アカウントの AccessKey Secret です。 |
ステップ 4:接続性のテスト
接続性のテストと続行 をクリックします。
DTS は、Alibaba Cloud のデータベースインスタンス(ApsaraDB RDS for MySQL など)のホワイトリストおよび自己管理データベースをホストする Elastic Compute Service (ECS) インスタンスのセキュリティグループルールに、自動的に自サーバーの CIDR ブロックを追加します。オンプレミスデータセンターまたはサードパーティのクラウドプロバイダーでホストされているデータベースの場合は、CIDR ブロックを手動で追加します。詳細については、「DTS サーバーの CIDR ブロック」をご参照ください。
DTS サーバーの CIDR ブロックをデータベースのホワイトリストまたはセキュリティグループルールに追加することは、セキュリティリスクを伴います。続行する前に、強力な認証情報の使用、公開ポートの制限、API 呼び出しの認証、ホワイトリストルールの定期監査、不正な CIDR ブロックの制限などの予防措置を講じてください。あるいは、Express Connect、VPN Gateway、Smart Access Gateway を介して接続することもできます。
ステップ 5:同期対象の構成
このステップでは、DTS がレプリケーションするテーブル、競合時の処理方法、および Tablestore へのデータ書き込み方法を決定します。
同期オプション:
| パラメーター | 説明 |
|---|---|
| 同期タイプ | スキーマ同期、全量データ同期、および 増分データ同期 を選択します。全量データ同期では、まず既存データをロードし、その後、増分同期によって送信先を継続的な変更と同期させます。 |
| 競合テーブルの処理モード | 事前チェックを行い、エラーを報告オブジェクト名のマップ(デフォルト):送信先に同名のテーブルがすでに存在する場合、事前チェックは失敗します。必要に応じて、オブジェクト名マッピング機能を使用して競合するテーブルの名前を変更してください。詳細については、「」をご参照ください。エラーを無視して続行:このチェックをスキップします。全量同期中は、主キーまたは一意キーが一致する既存のレコードはそのまま保持されます。増分同期中は、これらのレコードは上書きされます。ソースと送信先のスキーマが不一致の場合、部分同期やタスクの失敗が発生する可能性があります。慎重に実行してください。 |
| 操作タイプ | 同期対象の DML 操作です。すべての操作タイプがデフォルトで選択されています。要件に応じて調整してください。 |
| 不正データの処理ポリシー | 書き込みエラーに対する対応方法:「スキップ」または「ブロック」です。 |
| データ書き込みモード | Tablestore へのデータ書き込み方法です。「行の上書き」では UpdateRowChange 操作を使用し、「行の更新」では PutRowChange 操作を使用します。 |
| バッチ書き込みモード | 複数行を一度に書き込む方法です。「BulkImportRequest」(オフライン書き込み)または「BatchWriteRowRequest」(複数行書き込み)から選択します。「BulkImportRequest」は、スループットが高くコストが低いことから推奨されます。 |
| 宛先インスタンスにおけるオブジェクト名の大文字小文字設定 | Tablestore におけるデータベース名、テーブル名、カラム名の大文字小文字の設定ポリシーです。デフォルト値:「DTS デフォルトポリシー宛先インスタンスにおけるオブジェクト名の大文字小文字の指定」。詳細については、「」をご参照ください。 |
| ソースオブジェクト | 同期対象のデータベースまたはテーブルを選択し、 |
| 選択済みオブジェクト | 送信先でのオブジェクト名を変更するには、該当オブジェクトを右クリックします。複数のオブジェクトを一括して名前変更するには、「一括編集オブジェクト名のマップ」をクリックします。詳細については、「」をご参照ください。条件に基づいて行をフィルターするには、テーブルを右クリックし、WHERE 句を指定します。詳細については、「フィルター条件の設定」をご参照ください。 |
データベース名のマッピングはサポートされていません。オブジェクト名のマッピングは、テーブルを同期対象として選択した場合にのみ適用されます。オブジェクトの名前を変更すると、依存関係のある他のオブジェクトが壊れる可能性があります。カラムタイプの変更は、カラム名マッピング機能を使用して行うことができます。
パフォーマンスチューニング(任意):
「[詳細]」をクリックして、これらの Tablestore 書き込みパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| キュー サイズ | 書き込みキューの長さです。 |
| スレッド数 | 書き込み用のコールバック スレッド数です。 |
| 同時実行数 | Tablestore への書き込みで許可される最大並行スレッド数です。 |
| バケット数 | 順次増分書き込みにおける並行バケット数です。値を大きくすると、並行書き込みスループットが向上します。ただし、同時実行数以下である必要があります。 |
ステップ 6:高度な設定の構成
[次へ: 詳細設定] をクリックして、以下のオプションを設定します。
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用の専用クラスター | デフォルトでは、DTS はタスクを共有クラスターでスケジュールします。より高い安定性を得るために、専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
| 接続失敗時の再試行時間 | ソースまたはターゲットに到達できない場合の DTS の再試行時間。有効範囲:10~1440 分。デフォルト:720 分。このパラメーターは 30 分を超える値に設定することを推奨します。この時間内に DTS が再接続できた場合、タスクは再開されます。それ以外の場合は、タスクが失敗します。複数のタスクが同じソースまたはターゲットを共有する場合、最も短い再試行時間枠が適用されます。再試行中は、DTS インスタンスの課金が発生します。 |
| その他の問題発生時の再試行時間 | DTS が失敗した DDL または DML 操作を再試行する時間。有効な値:1~1440 分。デフォルト:10。このパラメーターは 10 より大きい値に設定することを推奨します。[失敗した接続の再試行時間] より小さい必要があります。 |
| 完全データ移行のスロットリングの有効化 | ソースデータベースへの秒間クエリ数 (QPS) および完全データ同期中の移行速度 (RPS および MB/s) を制限して、ターゲットデータベースサーバーの負荷を軽減します。[完全データ同期] が選択されている場合にのみ表示されます。 |
| 増分データ同期のスロットリングの有効化 | 増分同期の RPS およびデータ同期速度(MB/s)を制限します。 |
| 環境タグ | 環境内で DTS インスタンスを識別するための任意のタグ。 |
| 転送および逆再生タスクのハートビートテーブルに対する SQL 操作の削除の有無 | DTS がソースデータベースにハートビートテーブルのSQL操作を書き込むかどうか。はいアラート通知設定: 書き込みをスキップします(コンソールに同期遅延が発生する場合があります)。いいえ: ハートビート操作を書き込みます(ソースデータベースの物理バックアップおよびクローン作成に影響を与える可能性があります)。 |
| ETL の構成 | ETL (抽出·変換·書き出し) を有効にするかどうかを選択します。[はい] を選択すると、データ処理文を入力できます。詳細については、「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。 |
| モニタリングとアラート | タスクの失敗、または同期遅延が大きい場合のアラートを設定します。 [はい] を選択して、アラートのしきい値と通知連絡先を設定します。 詳細については、「DTS タスクの作成時にモニタリングとアラートを設定する」をご参照ください。 |
ステップ 7:Tablestore のプライマリキー列の構成
[次へ: データベースおよびテーブルフィールドの設定] をクリックし、確認ダイアログで [OK] をクリックします。
DTS は、各ソーステーブルのプライマリキー列をデフォルトで Tablestore にマッピングします。別の列を使用するには、[定義ステータス] を すべて に設定し、[プライマリキー列] のドロップダウンリストから列を選択します。
複合プライマリキーを構成するには、複数のカラムを選択します。
ステップ 8:事前チェックの実行
[次へ: タスク設定を保存して事前チェック] をクリックして構成を保存し、事前チェックを開始します。
このタスク構成の API パラメーターをプレビューするには、[次へ: タスク設定の保存と事前チェック] の上にマウスを移動させ、[OpenAPI パラメーターのプレビュー] をクリックします。
DTS は、タスクを開始する前に事前チェックを実行します。いずれかの項目が失敗した場合:
失敗した項目の横にある[詳細の表示]をクリックして、原因を確認します。
問題を修正してから、[事前チェックを再実行] をクリックします。
項目に対してアラートがトリガーされた場合:
アラートを無視できる場合は、[アラートの詳細を確認] をクリックし、[無視] をクリックし、[OK] をクリックしてから、[再事前チェック] をクリックします。アラートを無視すると、データの不整合が発生する可能性があります。
アラートを無視できない場合:問題を解決してから、次のステップに進んでください。
ステップ 9:データ同期インスタンスの購入
成功率が100%に達するまで待ってから、[次: インスタンスの購入]をクリックします。
購入ページで、以下の項目を構成します。
| パラメーター | 説明 |
|---|---|
| 課金方法 | サブスクリプション:前払い方式。長期利用に適しており、コスト効率が優れています。契約期間のオプション:1~9か月、1年、2年、3年、または5年。従量課金:時間単位で課金されます。短期利用に適しています。ご利用が不要になった場合は、インスタンスをリリースして継続的な課金を回避してください。 |
| リソースグループ設定項目 | インスタンスが属するリソースグループです。デフォルト値: デフォルトリソースグループResource Management の概要 |
| インスタンスクラス | データ同期インスタンスのインスタンスクラスデータ同期のスループットレベルです。詳細については、「」をご参照ください。 |
「Data Transmission Service (従量課金)サービス利用規約」を読み、同意してください。その後、[購入して開始] をクリックしてください。
確認ダイアログで [OK] をクリックします。タスクはタスク リストに表示され、進行状況をモニターできます。
次のステップ
DTS コンソールで同期遅延をモニターします。ソースで長期間 DML 操作が実行されない場合、表示される遅延値は正確でないことがあります。遅延値を更新するには、ソースで任意の DML 操作を実行してください。データベース全体を同期する場合は、1 秒ごとに更新されるハートビートテーブルを作成することを検討してください。
同期するテーブルを変更するには、「同期するオブジェクトの変更」をご参照ください。
タスクの開始後に書き込みパフォーマンスを調整するには、タスクの設定ページで [Queue Size]、[Thread Quantity]、[Concurrency]、および [Buckets] パラメーターを調整します。