すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DDLレプリケーション

最終更新日:Aug 12, 2024

このトピックでは、グローバルデータベースネットワーク (GDN) でのDDLレプリケーション操作について説明します。

効率的なDMLレプリケーションは、GDNの上流クラスターと下流クラスター間のテーブル一貫性を実装します。 DDLレプリケーションは、GDNのプライマリクラスターとセカンダリクラスター間のスキーマの整合性を保証します。 GDNのプライマリクラスタとセカンダリクラスタ間のスキーマの一貫性は、テーブル構造の一貫性だけでなく、すべてのデータベースオブジェクトの一貫性も意味します。 これにより、フェールオーバーが発生したときにセカンダリクラスタがアプリケーショントラフィックを運ぶことができます。 そうしないと、インデックスを失うことでも重大なパフォーマンスの問題が発生します。

DDLタイプ

PolarDB-Xは、MySQLと互換性のある共通のテーブル、列、インデックス、ビュー、関数だけでなく、テーブルグループシーケンスグローバルセカンダリインデックス (GSI)クラスタ列インデックス (CCI)カスタム関数などのカスタムオブジェクトタイプもサポートしています。 PolarDB-Xは、TTLlocalityonline modify column (OMC) 、ローカルインデックスなどのカスタム拡張構文も提供します。 DDLレプリケーションは、互換性と分散シナリオの複雑さの両方の点で困難です。 したがって、PolarDB-Xは、シンプルさ、信頼性、使いやすさを特徴とする組み込みのDDLレプリケーション機能を提供します。

次の表に、サポートされるDDLタイプを示します。

データ型

DDLステートメント

サポートされているかどうか

補足

データベース

CREATE_DATABASE

必須

詳細については、「データベースステートメント」をご参照ください。

説明

ALTER DATABASEステートメントでは、文字セットを変更できません。 したがって、ALTER DATABASEはレプリケーションシナリオではサポートされません。

DROP_DATABASE

必須

ALTER_DATABASE

任意

MOVE_DATABASE

任意

テーブル

CREATE_TABLE

必須

詳細については、「テーブルステートメント」をご参照ください。

ALTER_TABLE

必須

DROP_TABLE

必須

TRUNCATE_TABLE

必須

RENAME_TABLE

必須

ANALYZE_TABLE

必須

パーティー

SPLIT_PARTITION

必須

詳細については、「Partitionステートメント」をご参照ください。

説明

パーティションの移行はサポートされていません。 詳細については、「制限1」をご参照ください。

SPLIT_INTO_BY_HOT_VALUE

必須

MERGE_PARTITIONS

必須

MOVE_PARTITIONS

いいえ

RENAME_PARTITION

必須

ADD_PARTITION

必須

DROP_PARTITION

必須

MODIFY_PARTITION

必須

REORGANIZE_PARTITION

必須

TRUNCATE_PARTITION

必須

TABLEGROUP

CREATE_TABLEGROUP

必須

詳細については、「テーブルグループステートメント」をご参照ください。

DROP_TABLEGROUP

必須

ALTER_TABLEGROUP

必須

MERGE_TABLEGROUP

必須

ALTER_TABLEGROUP_ADD_TABLE

必須

ALTER_TABLE_SET_TABLEGROUP

必須

JOINGROUP

CREATE_JOINGROUP

必須

ALTER_JOINGROUP

必須

DROP_JOINGROUP

必須

INDEX

CREATE_INDEX

必須

詳細は、「インデックス」をご参照ください。

DROP_INDEX

必須

ALTER_INDEX

必須

ALTER_INDEX_VISIBILITY

必須

シーケンス

CREATE_SEQUENCE

必須

詳細については、「シーケンス」をご参照ください。

DROP_SEQUENCE

必須

ALTER_SEQUENCE

必須

RENAME_SEQUENCE

必須

CONVET_ALL_シーケンス

必須

機能

CREATE_FUNCTION

必須

詳細については、「カスタム関数」をご参照ください。

DROP_FUNCTION

必須

ALTER_FUNCTION

必須

CREATE_JAVA_FUNCTION

必須

ALTER_JAVA_FUNCTION

必須

DROP_JAVA_FUNCTION

必須

手続き

CREATE_PROCEDURE

必須

詳細については、「ストアドプロシージャ」をご参照ください。

ALTER_PROCEDURE

必須

DROP_PROCEDURE

必須

VIEW

CREATE_VIEW

必須

詳細については、「ビュー」をご参照ください。

DROP_VIEW

必須

ALTER_VIEW

必須

CREATE_MATERIALIZED_VIEW

必須

DROP_MATERIALIZED_VIEW

必須

USER

CREATE_USER

必須

詳細については、「アカウントと権限の管理」をご参照ください。

DROP_USER

必須

SET_PASSWORD

必須

GRANT_PRIVILEGE_TO_USER

必須

REVOKE_PRIVILEGE_FROM_USER

必須

ロール

CREATE_ROLE

必須

詳細については、「ロールと権限の管理」をご参照ください。

DROP_ROLE

必須

GRANT_PRIVILEGE_TO_ROLE

必須

GRANT_ROLE_TO_USER

必須

SQL_SET_DEFAULT_ROLE

必須

REVOKE_PRIVILEGE_FROM_ROLE

必須

REVOKE_ROLE_FROM_USER

必須

SET

グローバルに設定...

いいえ

PolarDB-Xは、ネイティブMySQLと同じポリシーを採用しています。 プライマリ /セカンダリレプリケーションリンクが確立されている場合、データは同期されません。 これはスキーマの変更ではありません。 スキーマを変更するには、プライマリクラスターとセカンダリクラスターで別々に操作を実行します。

SQL のスロットリング

*

いいえ

SQLスロットリングは一時的な操作です。 GDNのセカンダリクラスターにスロットリングルールをコピーすることはできません。 スロットリングルールをセカンダリクラスターにコピーするには、プライマリクラスターとセカンダリクラスターで別々に操作を実行する必要があります。

説明

CCI (CREATE COLUMNAR INDEX、DROP COLUMNAR INDEX、およびALTER COLUMNAR INDEX) に関連するDDLステートメントはレプリケートできません。

テーブルグループの種類

PolarDB-Xは、明示的テーブルグループと暗黙的テーブルグループの2種類のテーブルグループをサポートしています。

  • create TABLEGROUPステートメントを実行して明示的なテーブルグループを作成し、DROP TABLEGROUPステートメントを実行してテーブルグループを削除し、ALTER TABLEGROUPステートメントを実行してテーブルグループを変更できます。 詳細は、「テーブルグループ」をご参照ください。

  • 暗黙のテーブルグループは、PolarDB-Xによって暗黙的に作成されます。 パーティションテーブルを作成したり、パーティションテーブルを削除したり、テーブルのパーティションタイプを変更したりすると、暗黙のテーブルグループが作成、変更、または削除されることがあります。 暗黙的なテーブルグループの場合、CREATE TABLEGROUPおよびDROP TABLEGROUPステートメントは使用できませんが、ALTER TABLEGROUPステートメントは使用できます。 暗黙のテーブルグループは、tg1、tg2、tg3などのシーケンス番号リストを維持する名前が付けられます。 シーケンス番号は、不確実性を伴って生成される。 例えば、分割テーブルT1およびT2が並列に作成される場合、これら2つのテーブルの暗黙テーブルグループのシーケンス番号はランダムである。 加えて、いくつかのシーケンス番号はスキップされ得る。 たとえば、テーブルグループのシーケンス番号が既存のシーケンス番号に1を追加することによって生成され、DDLタスクフローがロールバックされると、生成されたシーケンス番号はスキップされます。

暗黙的なテーブルグループは、PolarDB-Xのプライマリ /セカンダリレプリケーションに課題をもたらします。 プライマリクラスタとセカンダリクラスタがデフォルトのルールに基づいて独自の暗黙的なテーブルグループを生成する場合、プライマリクラスタとセカンダリクラスタの同じテーブルの暗黙的なテーブルグループの名前が一致しないか、すべての暗黙的なテーブルグループの名前が混同される可能性があります。 GDNの場合、暗黙のテーブルグループはDDLステートメントを拡張することによってレプリケートされます。 DDL文に暗黙的なテーブルグループの変更が含まれる場合、拡張DDL文はプライマリクラスターのバイナリログに記録されます。

例 1

テーブルを作成するための次のSQL文が送信されます。

create table if not exists tb1 (
  a int PRIMARY KEY,
  b int,
  c int,
  d varchar(10) UNIQUE,
  INDEX b(b),
  INDEX b_2(b),
  KEY b_3 (b),
  KEY b_4 (b),
  UNIQUE KEY b_5 (b),
  UNIQUE KEY b_6 (b),
  UNIQUE INDEX b_7 (b),
  UNIQUE INDEX b_8 (b),
  INDEX g1(b),
  KEY g2 (b),
  UNIQUE KEY g3 (b),
  UNIQUE INDEX g4 (b)
) DEFAULT CHARACTER SET = utf8mb4 DEFAULT COLLATE = utf8mb4_general_ci;

例 2

パーティションを変更するための次のSQL文が送信されます。

ALTER TABLE tb1 MERGE PARTITIONS p1, p2 TO p12;

バイナリログには、次の拡張SQL文が記録されます。

ALTER TABLE tb1 MERGE PARTITIONS p1, p2 TO p12 WITH TABLEGROUP=tg29 IMPLICIT;

マルチストリームレプリケーション

シングルストリームレプリケーションモードでは、プライマリクラスターのDDLステートメントは、バイナリログのシーケンスに基づいて1つずつセカンダリクラスターにレプリケートされます。 ただし、マルチストリームレプリケーションのシナリオでは、DDLレプリケーションでさまざまなレプリケーションリンクを調整することを検討する必要があります。 各レプリケーションリンクは、DDLステートメントを受け取った後、他のレプリケーションリンクを待つ必要があります。 DDLステートメントは、すべてのリンクがそれを受信した後にのみセカンダリクラスターにレプリケートできます。 そうしないと、DMLトラフィックとスキーマの間に不整合が発生し、例外またはデータエラーがスローされます。

マルチストリームレプリケーションの場合、PolarDB-Xは分散DDLレプリケーションエンジンを提供し、効率的なマルチリンク調整アルゴリズムを使用して分散シナリオでDDLレプリケーションの一貫性を実装します。

image.png

制限事項

制限1

PolarDB-Xでは、LOCALITYを使用してストレージの場所を指定できます。 この機能により、DDLステートメントにDNノードIDを含めることができます。 ただし、PolarDB-Xは、プライマリクラスターとセカンダリクラスターのDNノード間のアソシエーションマッピングをサポートしていません。 したがって、このようなSQL文を含むDDL文が下流のクラスターに複製されると、DN関連の情報はSQL文から削除されます。 この場合、セカンダリクラスターにログインして、パーティションの分布を手動で調整できます。

  • 例 1

    // The following SQL statement is executed on the primary cluster:
    CREATE TABLE test_pg3 (
      id int
    ) DEFAULT CHARSET = utf8mb4 DEFAULT COLLATE = utf8mb4_general_ci
    PARTITION BY RANGE (id) (
      PARTITION p0 VALUES LESS THAN (1000) LOCALITY 'dn=xdevelop-240524092100-31ef-bngl-dn-1',
      PARTITION p1 VALUES LESS THAN (2000) LOCALITY 'dn=xdevelop-240524092100-31ef-bngl-dn-1'
    )
    
    // The following SQL statement is duplicated to secondary clusters:
    create table test_pg3 (
      id int
    ) DEFAULT CHARACTER SET = utf8mb4 DEFAULT COLLATE = utf8mb4_general_ci
    PARTITION BY RANGE (id) (
      PARTITION p0 VALUES LESS THAN (1000),
      PARTITION p1 VALUES LESS THAN (2000)
    ) WITH TABLEGROUP = tg3778 IMPLICIT

    付き

  • 例 2

    // The following SQL statement is executed on the primary cluster:
    ALTER TABLE special_dml_test1
      MOVE PARTITIONS (p2, p4, p6, p8) TO 'xdevelop-240524092100-31ef-bngl-dn-0';
    
    // The following SQL statement is duplicated to secondary clusters:
    ALTER TABLE special_dml_test1;

リミット2

PolarDB-Xは、SET PARTITION_HINTステートメントをサポートし、指定されたパーティションで実行されるSQLステートメントを指定します。 GDNレプリケーションのシナリオでは、SET PARTITION_HINTステートメントをセカンダリクラスターに渡すことはできません。 このステートメントを実行して、プライマリノードの指定されたパーティションにデータを明示的に書き込んだ後、データがセカンダリクラスターの同じパーティションに書き込まれることは保証されません。