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

PolarDB:PolarDB-X インスタンス間でのデータの複製

最終更新日:Jun 18, 2025

MySQL のプライマリ/セカンダリ レプリケーションには、プライマリ データベースとセカンダリ データベースが必要です。PolarDB-X の Change Data Capture(CDC)機能に基づくバイナリロギング機能を使用すると、PolarDB-X データベースをプライマリ データベースとして構成できます。PolarDB-X の CDC 機能は、MySQL のレプリケーション機能の機能を提供します。これにより、PolarDB-X データベースをセカンダリ データベースとして構成できます。

使用上の注意

  • PolarDB-X から PolarDB-X へのデータ レプリケーションの構成方法は、PolarDB-X から MySQL へのデータ レプリケーションの構成方法とほぼ同じです。詳細については、「PolarDB-X から MySQL へのデータの複製」をご参照ください。

  • PolarDB-X が提供するデータ レプリケーション用の SQL 文は、MySQL と高度に互換性があります。詳細については、「レプリケーション」をご参照ください。

  • ネットワークの制限により、ユーザーは PolarDB-X コンソールで購入した PolarDB-X インスタンスのレプリケーション リンクを作成できません。この場合、レプリケーション リンクは主にセルフマネージド データベースに適用されます。

  • バージョン 5.4.12 以後、PolarDB-X は、グローバル セカンダリ インデックス(GSI)を持つテーブルに対する INSERT IGNORE 文の RETURNING 最適化をデフォルトで有効にします。ただし、この最適化により、PolarDB-X プライマリ/セカンダリ データベース レプリケーション シナリオでの binlog 消費中に、データの不整合が発生するリスクがあります。このリスクを軽減するには、SET GLOBAL DML_USE_RETURNING = FALSE 文を実行して最適化を無効にすることができます。最適化を無効にすると、GSI を持つテーブルに対する INSERT IGNORE 文のパフォーマンスが低下し、データ インポート タスクに影響を与える可能性があります。最適化を無効にするかどうかを決定する前に、ビジネス要件とワークロードを評価してください。

    問題の再現

    1. 一意のグローバル セカンダリ インデックス(UGSI)を持つ t という名前のテーブルを作成します。

      CREATE TABLE t(
        pk INT,
        sk INT,
        uk INT,
        PRIMARY KEY(pk),
        UNIQUE GLOBAL INDEX g_i_k(uk) PARTITION BY uk
      ) PARTITION BY sk;/* 一意のグローバルセカンダリインデックス(UGSI)を持つtという名前のテーブルを作成します。 */
    2. INSERT INTO および INSERT IGNORE を使用してテーブルにデータを挿入します。

      INSERT INTO t VALUES (1,1,1),(2,2,2);
      INSERT IGNORE INTO t VALUES (1,2,2);/* INSERT INTOおよびINSERT IGNOREを使用してテーブルにデータを挿入します。 */
    3. RETURNING 最適化が有効になっている INSERT IGNORE 実行プロセスは、最初に一意性をチェックせずにテーブルにデータを挿入します。重複が検出されると、重複行に対して DELETE 操作を実行します。これにより、次の binlog エントリが生成されます。

      INSERT INTO t VALUES(1,2,2);
      DELETE FROM t WHERE pk = 1 AND sk = 2;
      説明

      セカンダリ PolarDB-X インスタンスがこれらの binlog エントリを消費すると、INSERT 文が実行され、uk 列で一意キーの競合が発生します。次に、レプリカ コンポーネントは、競合を処理するために INSERT 操作を REPLACE 操作に変換します。ただし、これによりテーブル内の元のレコードも置き換えられ、プライマリ インスタンスとセカンダリ インスタンス間でデータの不整合が発生します。

手順

プライマリ/セカンダリ レプリケーション リンクを作成する

  • 構文

    CHANGE MASTER TO option [, option] ... [ channel_option ]
    
    option: {
        MASTER_HOST = 'host_name'
      | MASTER_USER = 'user_name'
      | MASTER_PASSWORD = 'password'
      | MASTER_PORT = port_num
      | MASTER_LOG_FILE = 'source_log_name'
      | MASTER_LOG_POS = source_log_pos
      | MASTER_LOG_TIME_SECOND = source_log_time
      | SOURCE_HOST_TYPE = {RDS|POLARDBX|MYSQL}
      | STREAM_GROUP = 'stream_group_name'
      | WRITE_SERVER_ID = write_server_id
      | TRIGGER_AUTO_POSITION = {FALSE|TRUE}
      | WRITE_TYPE = {SPLIT|SERIAL|TRANSACTION}
      | MODE = {INCREMENTAL|IMAGE}
      | CONFLICT_STRATEGY = {OVERWRITE|INTERRUPT|IGNORE|DIRECT_OVERWRITE}
      | IGNORE_SERVER_IDS = (server_id_list)
    }
    
    channel_option:
        FOR CHANNEL channel
    
    server_id_list:
        [server_id [, server_id] ... ]
  • パラメーター

    • MASTER_HOST: プライマリ インスタンスのアドレス。

    • MASTER_USER: プライマリ インスタンスへの接続に使用するユーザー名。

    • MASTER_PASSWORD: プライマリ インスタンスへの接続に使用するパスワード。

    • MASTER_PORT: プライマリ インスタンスへの接続に使用するポート番号。

    • MASTER_LOG_FILE: プライマリ インスタンス上のログ ファイルの名前。

    • MASTER_LOG_POS: プライマリ インスタンス上のログ ファイル内の binlog レプリケーションの開始オフセット。

    • MASTER_LOG_TIME_SECOND: プライマリ インスタンスの時間オフセット。値は、1970 年 1 月 1 日 00:00:00 UTC から経過した秒数を表す UNIX タイムスタンプです。MASTER_LOG_FILE パラメーターと MASTER_LOG_POS パラメーターが正確なオフセットを指定するように構成されている場合、MASTER_LOG_TIME_SECOND パラメーターは無視されます。

    • SOURCE_HOST_TYPE: プライマリ インスタンスのタイプ。デフォルト値: MYSQL。プライマリ インスタンスが PolarDB-X 2.0 インスタンスの場合は、このパラメーターを POLARDBX に明示的に設定する必要があります。

    • STREAM_GROUP: マルチストリーム グループが作成されている場合のストリーム グループの名前。プライマリ インスタンスが PolarDB-X 2.0 インスタンスであり、プライマリ インスタンスのマルチストリーム binlog サービスを使用する場合は、このパラメーターを指定する必要があります。

    • WRITE_SERVER_ID: 書き込みサーバーの ID。

    • TRIGGER_AUTO_POSITION: プライマリ インスタンスの最新のオフセットを自動的に使用するかどうかを指定します。デフォルト値: FALSE。

    • WRITE_TYPE: 書き込みモード。デフォルト値は SPLIT で、非トランザクション並列レプリケーションを示します。値 SERIAL は非トランザクション シリアル レプリケーションを示し、値 TRANSACTION はトランザクション シリアル レプリケーションを示します。

    • MODE: 同期モード。値 INCREMENTAL は増分データ同期を示し、値 IMAGE はスキーマ同期、完全データ同期、および増分データ同期を示します。

    • CONFLICT_STRATEGY: 競合ポリシー。デフォルト値は OVERWRITE で、REPLACE INTO 文を実行することで制約違反のあるデータが上書きされることを示します。値 INTERRUPT はレプリケーションが中断されることを示し、値 IGNORE は競合が無視されることを示します。

    • IGNORE_SERVER_IDS: 無視するサーバーの ID。

    • channel_option: リンクの名前。既存のリンク名とは異なる必要があります。

  • 例 1

    次の文を実行してレプリケーション リンクを作成し、ログ ファイル内の 1713159938(2024-04-15 13:45:38)から同期を開始します。

    CHANGE MASTER TO 
    MASTER_HOST='pxc-YOURENDPOINT.com', 
    MASTER_PORT=3306, 
    MASTER_USER='polardbx', 
    MASTER_PASSWORD='123456', 
    SOURCE_HOST_TYPE=polardbx, 
    MASTER_LOG_TIME_SECOND=1713159938, 
    write_server_id=1944903859
    FOR CHANNEL 'pxc-bjrcsnbyagcdxh';
  • 例 2

    次の文を実行してレプリケーション リンクを作成し、プライマリ インスタンス上の binlog.000001 ファイルのオフセット 4 から同期を開始します。

    CHANGE MASTER TO 
    MASTER_HOST='pxc-YOURENDPOINT.com', 
    MASTER_PORT=3306, 
    MASTER_USER='polardbx', 
    MASTER_PASSWORD='123456', 
    SOURCE_HOST_TYPE=polardbx, 
    MASTER_LOG_FILE='binlog.000001', 
    MASTER_LOG_POS=4, 
    write_server_id=1944903859
    FOR CHANNEL 'pxc-bjrcsnbyagcdxh';
説明

詳細については、「CHANGE MASTER TO」をご参照ください。

プライマリ/セカンダリ レプリケーション リンクのフィルター構成を変更する

  • 構文

    CHANGE REPLICATION FILTER option [, option] ... [ channel_option ]
    
    option: {
        REPLICATE_DO_DB = (do_db_list)
      | REPLICATE_IGNORE_DB = (ignore_db_list)
      | REPLICATE_DO_TABLE = (do_table_list)
      | REPLICATE_IGNORE_TABLE = (ignore_table_list)
      | REPLICATE_WILD_DO_TABLE = (wild_do_table_list)
      | REPLICATE_WILD_IGNORE_TABLE = (wile_ignore_table_list)
      | REPLICATE_SKIP_TSO = 'tso_num'
      | REPLICATE_SKIP_UNTIL_TSO = 'tso_num'
      | REPLICATE_ENABLE_DDL = {TRUE|FALSE}
    }
    
    channel_option:
        FOR CHANNEL channel
  • パラメーター

    • REPLICATE_SKIP_TSO: binlog イベントがスキップされる Timestamp Oracle(TSO)。TSO の詳細については、「分散トランザクション」をご参照ください。

    • REPLICATE_SKIP_UNTIL_TSO: すべての binlog イベントがスキップされるまでの TSO。

    • REPLICATE_ENABLE_DDL: DDL 文を同期するかどうかを指定します。デフォルト値: TRUE。

    • 次のパラメーターの詳細については、CHANGE REPLICATION FILTER を参照してください。

      • REPLICATE_DO_DB

      • REPLICATE_IGNORE_DB

      • REPLICATE_DO_TABLE

      • REPLICATE_IGNORE_TABLE

      • REPLICATE_WILD_DO_TABLE

      • REPLICATE_WILD_IGNORE_TABLE

  • 例 1

    次の文を実行して、TEST データベースの変更のみを同期するようにレプリケーション リンクを変更します。

    CHANGE REPLICATION FILTER REPLICATE_DO_DB=(TEST);
  • 例 2

    1. TSO を取得する

      SHOW BINLOGS EVENTS 文を実行して、binlog イベントの TSO を取得します。次の図は、応答の例を示しています。

      image

      INFO 列の CTS:: に続く数値文字列は、イベントの TSO です。

    2. TSO に対応するイベントをスキップする

      次の文を実行して、次の TSO に対応する bin イベントをスキップするようにレプリケーション リンクを変更します。716669064683978758416977558623632834560000000000000000。この場合、POS 列の値が 372 である binlog イベントはスキップされます。

      CHANGE REPLICATION FILTER REPLICATE_SKIP_TSO='716669064683978758416977558623632834560000000000000000';

      詳細については、CHANGE REPLICATION FILTER を参照してください。

説明

詳細については、「CHANGE REPLICATION FILTER」をご参照ください。

プライマリ/セカンダリ レプリケーション リンクを開始する

  • 構文

    START SLAVE [ channel_option ]
    
    channel_option:
        FOR CHANNEL channel
  • 例 1

    次の文を実行して、CHANGE MASTER TO 文を実行して作成されたすべてのプライマリ/セカンダリ レプリケーション リンクを有効にします。

    START SLAVE;
  • 例 2

    次の文を実行して、名前が TEST であるプライマリ/セカンダリ レプリケーション リンクを有効にします。

    START SLAVE for channel 'TEST';
説明

詳細については、「START SLAVE」をご参照ください。

プライマリ/セカンダリ レプリケーション リンクを停止する

  • 構文

    STOP SLAVE [ channel_option ]
    
    channel_option:
        FOR CHANNEL channel
  • 例 1

    次の文を実行して、CHANGE MASTER TO 文を実行して作成されたすべてのプライマリ/セカンダリ レプリケーション リンクを無効にします。

    STOP SLAVE;
  • 例 2

    次の文を実行して、名前が TEST であるプライマリ/セカンダリ レプリケーション リンクを無効にします。

    STOP SLAVE for channel 'TEST';
説明

詳細については、「STOP SLAVE」をご参照ください。

プライマリ/セカンダリ レプリケーション リンクを削除する

重要

プライマリ/セカンダリ レプリケーション リンクを削除する前に、データ レプリケーション プロセスを停止します。

  • 構文

    RESET SLAVE ALL [ channel_option ]
    
    channel_option:
        FOR CHANNEL channel
  • 例 1

    次の文を実行して、CHANGE MASTER TO 文を実行して確立されたすべてのプライマリ/セカンダリ レプリケーション リンクを削除します。

    RESET SLAVE ALL;
  • 例 2

    次の文を実行して、TEST という名前のチャンネルを持つプライマリ/セカンダリ レプリケーション リンクを削除します。

    RESET SLAVE ALL for channel 'TEST';
説明

詳細については、「RESET SLAVE ALL」をご参照ください。