移行、ディザスタリカバリ、または読み取りスケーリングなどの目的で、2 つの ApsaraDB RDS for MariaDB インスタンスを継続的に同期させる必要がある場合、Data Transmission Service (DTS) を使用すると、スキーマ同期、完全なデータ同期、および増分同期を 1 つのタスクで実行できます。以下の手順に従って、2 つの MariaDB インスタンス間で同期タスクを作成してください。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
宛先の ApsaraDB RDS for MariaDB インスタンス。詳細については、「ApsaraDB RDS for MariaDB インスタンスの作成」をご参照ください。
ソースインスタンスの全データサイズよりも大きいストレージ領域が、宛先インスタンスに確保されていること
必要な権限に記載された権限を持つソースデータベースアカウント
課金
| 同期タイプ | コスト |
|---|---|
| スキーマ同期および完全なデータ同期 | 無料 |
| 増分同期 | 課金されます。「課金概要」をご参照ください。 |
サポートされる同期トポロジ
DTS では、MariaDB インスタンス間で以下の同期トポロジがサポートされています。
単方向・一対一同期
単方向・一対多同期
単方向・カスケード同期
単方向・多対一同期
双方向・一対一同期
すべての同期トポロジの詳細については、「同期トポロジ」をご参照ください。
サポートされる 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 操作はデータの不整合を引き起こす可能性があります。同期中に同期対象テーブルの名前を変更した場合、DTS はそのテーブルのデータ同期を停止します。これを防ぐには、個別のテーブルではなく、データベース全体を同期オブジェクトとして選択してください。また、名前変更前後ともに、該当テーブルを含むデータベースが同期対象に含まれていることを確認してください。
必要な権限
各インスタンスで使用するデータベースアカウントに、以下の権限を付与してください。
| インスタンス | 必要な権限 |
|---|---|
| ソース ApsaraDB RDS for MariaDB | 読み取りおよび書き込み権限。詳細については、「アカウントの作成」および「アカウント権限の変更またはリセット」をご参照ください。 |
| 宛先 ApsaraDB RDS for MariaDB | 読み取りおよび書き込み権限 |
ソースアカウントが ApsaraDB RDS for MariaDB コンソール経由で作成されていない場合は、明示的に以下の権限を付与してください:REPLICATION CLIENT、REPLICATION SLAVE、SHOW VIEW、SELECT。
制限事項
ソースデータベースの要件
同期対象のテーブルには、すべてのフィールドが一意となる PRIMARY KEY または一意制約 (UNIQUE constraint) が必要です。これらの制約がないと、宛先データベースに重複レコードが発生する可能性があります。
データベース全体ではなく特定のテーブル(例:テーブルや列の名前変更を伴う場合)を同期する場合、1 つのタスクで最大 1,000 テーブルまでサポートされます。この上限を超えるとリクエストエラーが発生します。複数のタスクをバッチ処理で実行するか、データベース全体を同期してください。
タスク開始前に、バイナリログパラメーターを以下のように設定してください。
パラメーター 必須値 理由 binlog_row_imagefullApsaraDB RDS for MariaDB ではバイナリログがデフォルトで有効になっています。このパラメーターが fullに設定されていない場合、事前チェックに失敗し、タスクを開始できません。バイナリログ保持期間 — 増分同期のみ 最低 24 時間 DTS がバイナリログを取得できない場合、タスクは失敗し、データの不整合やデータ損失が発生する可能性があります。保持期間の要件を満たさない場合、DTS のサービスレベルアグリーメント (SLA) は適用されません。 バイナリログ保持期間 — 完全同期+増分同期 最低 7 日間 完全なデータ同期が完了すると、保持期間を 24 時間以上に短縮できます。
外部キーの動作
スキーマ同期中、DTS はソースから宛先へ外部キーを同期します。
完全なデータ同期および増分同期中、DTS はセッションレベルで外部キーに関する制約チェックおよびカスケード操作を一時的に無効化します。同期中にソース側でカスケード更新または削除操作を実行すると、データの不整合が発生する可能性があります。
その他の制限事項
宛先データベースのバージョンは、ソースデータベースのバージョンと同じか、それより新しい必要があります。宛先のバージョンが古い場合、互換性の問題が発生します。
ピーク時間帯を避けて同期タスクを実行してください。初期の完全なデータ同期では、両インスタンスの読み取りおよび書き込みリソースが使用されるため、サーバー負荷が高まります。
初期の完全なデータ同期中に並列 INSERT 操作を実行すると、宛先のテーブルスペースにフラグメントが発生します。完全同期完了後、宛先の使用テーブルスペースはソースよりも大きくなります。
同期テーブルに対してオンライン DDL を実行する際に、pt-online-schema-change などのツールを使用しないでください。代わりに、Data Management (DMS) を使用してください。詳細については、「ロックフリーデータ定義言語 (DDL) 操作の実行」をご参照ください。
同期中は、宛先データベースへの書き込みを DTS 経由でのみ行ってください。他のツールを使用して宛先に書き込むと、データの不整合が発生します。やむを得ず他のツールを使用する場合は、DMS を用いたオンライン DDL 操作は実行しないでください。これにより、宛先でデータ損失が発生する可能性があります。
宛先データベースで DDL ステートメントが失敗した場合でも、DTS タスクは継続して実行されます。失敗した DDL ステートメントはタスクログで確認できます。「タスクログの表示」をご参照ください。
同期タスクの作成
ステップ 1:データ同期タスクページへ移動
Data Management (DMS) コンソール にログインします。
上部ナビゲーションバーで、Data + AI をクリックします。
左側ナビゲーションウィンドウで、DTS (DTS) > データ同期 を選択します。
DMS コンソールのレイアウトは、構成によって異なる場合があります。「シンプルモード」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。また、新しい DTS コンソールのデータ同期タスクページに直接移動することもできます。
ステップ 2:リージョンの選択
データ同期タスク の右側で、同期インスタンスが配置されているリージョンを選択します。
新規 DTS コンソールでは、上部ナビゲーションバーからリージョンを選択します。
ステップ 3:ソースおよび宛先データベースの構成
タスクの作成 をクリックします。タスク作成ウィザードで、以下の設定を構成します。
進む前に、ページ上に表示される 制限事項 を必ずご確認ください。このステップを省略すると、タスクの失敗やデータの不整合が発生する可能性があります。
タスク設定:
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS が自動的に名前を生成します。タスクを識別しやすいように、意味のある名前を指定してください。名前は一意である必要はありません。 |
ソースデータベース
| パラメーター | 値 |
|---|---|
| 既存の DMS データベースインスタンスを選択 | 任意。DMS データベースインスタンスが登録されていない場合は、空白のままにしてください。 |
| データベースタイプ | MariaDB |
| アクセス方法 | Alibaba Cloud インスタンス |
| インスタンスリージョン | ソース ApsaraDB RDS for MariaDB インスタンスが配置されているリージョン |
| Alibaba Cloudアカウント全体でのデータの複製 | いいえ(同一アカウント内同期の場合) |
| インスタンス ID | ソース ApsaraDB RDS for MariaDB インスタンスの ID |
| データベースアカウント | 同期対象オブジェクトに対する読み取り権限を持つアカウント |
| データベースパスワード | データベースアカウントのパスワード |
| 暗号化 | 非暗号化 |
宛先データベース
| パラメーター | 値 |
|---|---|
| 既存の DMS データベースインスタンスを選択 | 任意。DMS データベースインスタンスが登録されていない場合は、空白のままにしてください。 |
| データベースタイプ | MariaDB |
| アクセス方法 | Alibaba Cloud インスタンス |
| インスタンスリージョン | 宛先 ApsaraDB RDS for MariaDB インスタンスが配置されているリージョン |
| RDS インスタンス ID | 宛先 ApsaraDB RDS for MariaDB インスタンスの ID |
| データベースアカウント | 宛先データベースに対する読み取りおよび書き込み権限を持つアカウント |
| データベースパスワード | データベースアカウントのパスワード |
| 暗号化 | 非暗号化 |
ステップ 4:接続性のテスト
接続性のテストと続行 をクリックします。
DTS は、自動的にその CIDR ブロックを Alibaba Cloud データベースインスタンスのホワイトリストおよび自己管理データベースをホストする Elastic Compute Service (ECS) インスタンスのセキュリティグループルールに追加します。ECS インスタンスがデータベースにアクセスできることを確認する必要があります。データベースが複数の ECS インスタンスにデプロイされている場合、各 ECS インスタンスのセキュリティグループルールに DTS サーバーの CIDR ブロックを手動で追加する必要があります。データセンター内または第三者クラウドプロバイダーによってホストされる自己管理データベースの場合、DTS の CIDR ブロックをデータベースのホワイトリストに手動で追加してください。詳細については、「DTS サーバーの CIDR ブロック」をご参照ください。
ホワイトリストまたはセキュリティグループルールへの CIDR ブロック追加は、潜在的なセキュリティリスクを招く可能性があります。DTS を使用する前に、強力な認証情報を使用する、公開ポートを最小限に抑える、API 呼び出しを認証する、ホワイトリストおよびセキュリティグループルールを定期的に見直す、可能な限り Express Connect、VPN Gateway、または Smart Access Gateway を経由して接続するなど、適切なセキュリティ対策を講じてください。
ステップ 5:同期オブジェクトの構成
以下のパラメーターを構成し、次に高度な設定に進んでください。
| パラメーター | 説明 |
|---|---|
| 同期タイプ | スキーマ同期、完全なデータ同期、および 増分同期 を選択します。増分同期はデフォルトで選択されています。完全なデータ同期では、ソースから宛先へ既存データをコピーし、増分同期のベースラインとして機能します。 |
| ソースデータベース内のトリガーの移行方法 | トリガーの同期方法を選択します。これは スキーマ同期 が選択されている場合にのみ表示されます。同期対象のトリガーがない場合は、このパラメーターをスキップしてください。「ソースデータベースからのトリガーの同期または移行」をご参照ください。 |
| 競合テーブルの処理モード | 事前チェックとエラー報告(デフォルト):ソースと送信先に同名のテーブルがある場合、事前チェックに失敗します。送信先のテーブルを削除または名前変更できない場合は、オブジェクト名マッピング機能を使用して名前を変更してください。「オブジェクト名のマップ」をご参照ください。エラーを無視して続行:競合チェックをスキップします。注意して使用してください。データの不整合が発生する可能性があります。フルデータ同期中に、送信先のレコードとソースのレコードでプライマリキーまたは一意キーが一致する場合、送信先のレコードは保持されます(上書きされません)。増分同期中は、送信先のレコードが上書きされます。スキーマが異なる場合、一部の列のみが同期されるか、タスクが失敗する場合があります。 |
| ソースオブジェクト | ソースオブジェクト セクションからオブジェクトを選択し、矢印アイコンをクリックして 選択済みオブジェクト セクションに移動します。列、テーブル、またはデータベースを選択できます。テーブルまたは列を選択した場合、ビュー、トリガー、およびストアドプロシージャは除外されます。 |
| 選択済みオブジェクト | オブジェクトの名前を変更するには、そのオブジェクトを右クリックします。複数のオブジェクトの名前を変更するには、右上隅にある [一括編集] をクリックします。テーブルを右クリックすると、同期する特定の SQL 操作を選択したり、データフィルタリング用の WHERE 条件を追加したりできます。詳細については、「オブジェクト名マッピング」および「SQL 条件を使用したデータフィルタリング」をご参照ください。オブジェクト名マッピングを使用してオブジェクトの名前を変更すると、依存オブジェクトが同期に失敗する場合があります。 |
ステップ 6:高度な設定の構成
次へ:高度な設定 をクリックし、以下の項目を構成します。
| パラメーター | 説明 |
|---|---|
| モニタリングとアラート | アラート機能を有効化して、タスクが失敗した場合や同期遅延がしきい値を超えた場合に通知を受信できるようにします。アラートのしきい値と通知の受信者を設定します。詳細については、「DTS タスクを作成するときにモニタリングとアラートを設定する」をご参照ください。 |
| 接続失敗時の再試行時間 | タスク開始後に接続失敗時に DTS が再試行する時間です。範囲:10~1,440 分。デフォルト:720 分。30 分を超える値を設定してください。この時間内に DTS が再接続できた場合、タスクは再開します。それ以外の場合はタスクが失敗します。再試行中も DTS インスタンスの課金が発生します。複数のタスクが同じソースまたは宛先データベースを共有する場合、最も短い再試行時間が適用されます。 |
| その他の障害発生時の再試行時間 | DDL または DML 操作の失敗時に DTS が再試行する時間です。範囲:1~1,440 分。デフォルト:10 分。10 分を超える値を設定してください。この値は 接続失敗時の再試行時間 よりも短くする必要があります。 |
| 完全なデータ移行のレート制御の有効化 | ソースデータベースへの秒間クエリ数 (QPS)、完全なデータ移行の RPS、およびデータ移行速度(MB/s)を制限することで、宛先サーバーの負荷を軽減します。完全なデータ同期 が選択されている場合にのみ利用可能です。 |
| 増分同期のレート制御の有効化 | 増分同期の RPS およびデータ同期速度(MB/s)を制限することで、宛先サーバーの負荷を軽減します。 |
| 環境タグ | DTS インスタンスを識別するためのタグです。任意。 |
| ETL の構成 | ETL (抽出・変換・書き出し) 機能を有効化して、同期中にデータを処理します。コードエディタにデータ処理文を入力します。詳細については、「ETLとは?」および「データ移行またはデータ同期タスクでETLを設定する」をご参照ください。 |
ステップ 7:事前チェックの実行
次へ:タスク設定の保存と事前チェック をクリックします。
このタスクの OpenAPI パラメーターをプレビューするには、次へ:タスク設定の保存と事前チェック 上にカーソルを合わせ、OpenAPI パラメーターのプレビュー をクリックしてください。
タスクを開始する前に、DTS が事前チェックを実行します。事前チェックが失敗した場合は、各失敗項目の横にある 詳細の表示 をクリックし、問題を解決した上で再度事前チェックを実行してください。無視可能なアラート項目については、アラートの詳細の確認 > 無視 > OK をクリックし、その後 再チェック をクリックしてください。アラート項目を無視すると、データの不整合が発生する可能性があります。
ステップ 8:事前チェックの完了を待機
成功率 が 100 % になるまで待機し、その後 次へ:インスタンスの購入 をクリックします。
ステップ 9:同期インスタンスの購入
購入 ページで、以下の項目を構成します。
| パラメーター | 説明 |
|---|---|
| 課金方法 | サブスクリプション:一定期間の前払い方式。長期利用に適しています。従量課金:時間単位で課金されます。短期利用に適しています。不要になった場合は、インスタンスを解放して課金を停止してください。 |
| リソースグループ設定 | 同期インスタンスのリソースグループ。デフォルトでは、デフォルトのリソースグループが使用されます。詳細については、「Resource Management とは? |
| インスタンスクラス | 同期速度を決定します。詳細については、「データ同期インスタンスのインスタンスクラス」をご参照ください。 |
| サブスクリプション期間 | サブスクリプション 課金方法でのみ利用可能です。期間の選択肢:1~9 か月、または 1、2、3、5 年です。 |
ステップ 10:サービス利用規約の承諾
Data Transmission Service(従量課金)サービス利用規約 を読み、チェックボックスをオンにしてください。
ステップ 11:タスクの開始
購入して開始 をクリックします。ダイアログボックスで OK をクリックします。
タスクリストで進行状況を確認できます。