本文介绍了基于Binlog文件在MySQL服务器之间进行数据复制的语句。

Binlog日志服务如何支持数据复制

  • PolarDB-X的Binlog文件是在DN节点的物理Binlog基础之上生成的,剔除了分布式事务的细节,只保留了单机事务的特性。同时,Binlog兼容MySQL Binlog文件格式,在数据复制方式上也完全兼容MySQL Dump协议,您可以像使用单机MySQL一样来复制PolarDB-X的事务日志。
  • PolarDB-X的Binlog日志服务有两种形态,分别是单流Binlog日志服务和多流Binlog日志服务,详细介绍请参见Binlog日志服务
  • PolarDB-X通过一系列的协议和算法来保证Binlog服务的稳定可靠:
    • 当CDC发生HA切换、增减节点操作时RTO小于30s。
    • 当对DN节点进行扩缩容时,只需触发一次链路重启,RTO小于20s。
    • 当进行DDL变更时,Binlog服务无任何阻塞行为,完全Online。

使用限制

  • 暂不支持Gtid(Global Transaction Identifier)模式下的数据复制。
  • 对于单流Binlog日志服务,仅当事务策略指定为TSO时(即更高强度的一致性保证),才支持对分布式事务的合并。

数据复制源端支持的SQL语句

数据复制目标端支持的SQL语句

  • 如果数据复制目标端是标准MySQL,目前支持MySQL的Replicate语句。
  • 如果需要复制多流服务的Binlog,需要针对每条流分别创建复制链路,把每条流看作一个单机MySQL即可。
说明 如果目标端是PolarDB-X,目前暂时不支持相关Replicate指令。
  • 在数据复制目标端设置数据源端的信息:
    CHANGE MASTER TO option [, option] ... [ channel_option ]
    
    option: {
        MASTER_BIND = 'interface_name'
      | MASTER_HOST = 'host_name'
      | MASTER_USER = 'user_name'
      | MASTER_PASSWORD = 'password'
      | MASTER_PORT = port_num
      | PRIVILEGE_CHECKS_USER = {'account' | NULL}
      | REQUIRE_ROW_FORMAT = {0|1}
      | REQUIRE_TABLE_PRIMARY_KEY_CHECK = {STREAM | ON | OFF}
      | ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = {OFF | LOCAL | uuid}
      | MASTER_LOG_FILE = 'source_log_name'
      | MASTER_LOG_POS = source_log_pos
      | MASTER_AUTO_POSITION = {0|1}
      | RELAY_LOG_FILE = 'relay_log_name'
      | RELAY_LOG_POS = relay_log_pos
      | MASTER_HEARTBEAT_PERIOD = interval
      | MASTER_CONNECT_RETRY = interval
      | MASTER_RETRY_COUNT = count
      | SOURCE_CONNECTION_AUTO_FAILOVER = {0|1}
      | MASTER_DELAY = interval
      | MASTER_COMPRESSION_ALGORITHMS = 'value'
      | MASTER_ZSTD_COMPRESSION_LEVEL = level
      | MASTER_SSL = {0|1}
      | MASTER_SSL_CA = 'ca_file_name'
      | MASTER_SSL_CAPATH = 'ca_directory_name'
      | MASTER_SSL_CERT = 'cert_file_name'
      | MASTER_SSL_CRL = 'crl_file_name'
      | MASTER_SSL_CRLPATH = 'crl_directory_name'
      | MASTER_SSL_KEY = 'key_file_name'
      | MASTER_SSL_CIPHER = 'cipher_list'
      | MASTER_SSL_VERIFY_SERVER_CERT = {0|1}
      | MASTER_TLS_VERSION = 'protocol_list'
      | MASTER_TLS_CIPHERSUITES = 'ciphersuite_list'
      | MASTER_PUBLIC_KEY_PATH = 'key_file_name'
      | GET_MASTER_PUBLIC_KEY = {0|1}
      | NETWORK_NAMESPACE = 'namespace'
      | IGNORE_SERVER_IDS = (server_id_list)
    }
    
    channel_option:
        FOR CHANNEL channel
    
    server_id_list:
        [server_id [, server_id] ... ]
  • 开启数据复制
    START {SLAVE | REPLICA}
  • 停止数据复制
    STOP {SLAVE | REPLICA}
  • 重置数据复制进程(需要先停止数据复制进程):
    RESET {SLAVE | REPLICA} [ALL] [channel_option]
    
    channel_option:
        FOR CHANNEL channel