使用PolarDB-X作为PolarDB-X的Slave

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

    1. TSO获取

      执行SHOW BINLOGS EVENTS语句获取对应binlog event的TSO,返回示例如下:

      image

      其中INFO列中以CTS:: 开头的数字串即为该event对应的TSO。

    2. 跳过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