このトピックでは、PolarDB-X から MySQL にデータをレプリケートする方法について説明します。
概要
PolarDB-X は MySQL レプリケーションプロトコルと互換性があります。そのため、PolarDB-X から MySQL にデータをレプリケートできます。 PolarDB-X と MySQL 間のレプリケーションリンクを管理するために、MySQL で次の SQL 文を実行できます。データレプリケーションの SQL 文の詳細については、MySQL の公式ドキュメントをご参照ください。
PolarDB-X インスタンスが MySQL 5.7 と互換性がある場合は、PolarDB-X のセカンダリデータベースとして MySQL 5.7 データベースを使用します。 PolarDB-X インスタンスが MySQL 8.0 と互換性がある場合は、PolarDB-X のセカンダリデータベースとして MySQL 8.0 データベースを使用します。 MySQL 8.0.27 以降を使用することをお勧めします。
マルチストリームバイナリロギング機能を有効にする場合は、PolarDB-X のセカンダリデータベースとして MySQL データベースを構成する際に、バイナリログストリームごとにレプリケーションリンクを作成する必要があります。単一の MySQL インスタンスで複数のレプリケーションリンクを構成するか、バイナリログストリームごとに個別の MySQL セカンダリインスタンスを構成できます。単一の MySQL インスタンスで複数のレプリケーションリンクを構成する場合、DDL 文を使用したブロードキャストレプリケーションは困難です。
使用上の注意
バージョン 5.4.12 以降、PolarDB-X は、グローバルセカンダリインデックス (GSI) を持つテーブルに対する INSERT IGNORE 文に対して、デフォルトで RETURNING 最適化を有効にします。ただし、PolarDB-X がプライマリデータベースで MySQL がセカンダリデータベースである PolarDB-X から MySQL データベースへのレプリケーションシナリオでは、この最適化により、MySQL がバイナリログを消費するときにデータの不整合の問題が発生する可能性があります。このリスクを軽減するために、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: プライマリインスタンス上のログファイル内の、バイナリログレプリケーションを開始するオフセット。
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 インスタンスで、プライマリインスタンスのマルチストリームバイナリログサービスを使用する場合は、このパラメーターを指定する必要があります。
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」をご参照ください。
プライマリ/セカンダリレプリケーションリンクを開始する
構文
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」をご参照ください。