MySQL主从复制,分为Master和Slave两种角色,PolarDB-X的CDC提供的日志服务使PolarDB-X可以作为Master。同时,PolarDB-X的CDC还具备对标MySQL Replica的能力,使PolarDB-X作为Slave。
注意事项
操作方式和使用MySQL作为PolarDB-X的Slave基本一致。
PolarDB-X提供的Replication SQL高度兼容MySQL,具体信息,请参见Replication语句。
受限于网络,在通过控制台购买的PolarDB-X实例上,用户无法创建复制链路,该功能主要面向自建场景。
操作方法
创建主从复制链路
语法
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:主实例时间位点,采用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:写入server_id。
TRIGGER_AUTO_POSITION:是否自动采用主实例最新位点,默认为false。
WRITE_TYPE:写入方式,默认为 SPLIT,表示非事务完整的并行复制;SERIAL表示非事务完整的串行复制;TRANSACTION表示事务完整的串行复制。
MODE:模式,INCREMENTAL表示仅增量同步,IMAGE表示结构,全量以及增量同步。
CONFLICT_STRATEGY:冲突策略,默认为OVERWRITE(覆盖),表示对于约束冲突的数据会采取Replace Into写入;INTERRUPT表示复制中断;IGNORE表示忽略。
IGNORE_SERVER_IDS:需要忽略的server_id。
channel_option:指定该链路的名字,需要与当前已存在的链路名不同。
示例1
执行以下语句,可根据创建复制链路,并从binlog中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的offset 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:跳过该TSO对应的binlog event,TSO相关介绍请参见分布式事务。
REPLICATE_SKIP_UNTIL_TSO:跳过该TSO之前所有的binlog event(不包含该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 event的TSO,返回示例如下:
其中INFO列中以CTS:: 开头的数字串即为该event对应的TSO。
跳过TSO对应的event
执行以下语句,可修改复制链路,跳过TSO:716669064683978758416977558623632834560000000000000000对应的binlog event,即上图中POS=372的binlog event。
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
执行以下语句,可启动channel name为'TEST' 的主从复制链路。
START SLAVE for channel 'TEST';
更多信息,请参见START SLAVE。
暂停主从复制链路
语法
STOP SLAVE [ channel_option ] channel_option: FOR CHANNEL channel
示例1
执行以下语句,可暂停所有由CHANGE MASTER TO语句创建的主从复制链路。
STOP SLAVE;
示例2
执行以下语句,可暂停channel name为'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
执行以下语句,可删除channel name为'TEST' 的主从复制链路。
RESET SLAVE ALL for channel 'TEST';
更多信息,请参见RESET SLAVE ALL。