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文のパフォーマンスが低下し、データ インポート タスクに影響を与える可能性があります。最適化を無効にするかどうかを決定する前に、ビジネス要件とワークロードを評価してください。
手順
プライマリ/セカンダリ レプリケーション リンクを作成する
構文
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
TSO を取得する
SHOW BINLOGS EVENTS 文を実行して、binlog イベントの TSO を取得します。次の図は、応答の例を示しています。

INFO 列の CTS:: に続く数値文字列は、イベントの TSO です。
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」をご参照ください。