MST

星途 面试题库

面试题:MariaDB复制中slave IO线程如何建立与master的连接

请详细阐述在MariaDB复制架构下,slave的IO线程是怎样与master建立连接,从而获取二进制日志事件的?需要说明涉及的关键参数及配置过程。
28.3万 热度难度
数据库MariaDB

知识考点

AI 面试

面试题答案

一键面试

MariaDB复制架构下slave的IO线程与master建立连接及获取二进制日志事件过程

  1. 前期准备
    • 在master端,需要开启二进制日志功能。在my.cnf配置文件中设置:
    [mysqld]
    log - bin = /var/log/mysql/mysql - bin.log
    server - id = 1
    
    • log - bin指定二进制日志文件的路径和前缀。server - id是每个MySQL/MariaDB实例的唯一标识,在复制环境中master和slave的server - id不能相同。重启MariaDB服务使配置生效。
    • 在slave端,同样需要设置唯一的server - id,例如:
    [mysqld]
    server - id = 2
    
    重启MariaDB服务。
  2. 配置slave连接master
    • 在slave上执行以下命令配置连接信息:
    CHANGE MASTER TO
        MASTER_HOST ='master_host_ip',
        MASTER_USER ='replication_user',
        MASTER_PASSWORD ='replication_password',
        MASTER_LOG_FILE ='master_binlog_file_name',
        MASTER_LOG_POS = master_binlog_position;
    
    • MASTER_HOST是master的IP地址。
    • MASTER_USERMASTER_PASSWORD是在master上创建的用于复制的用户及其密码。创建用户的命令在master上执行:
    CREATE USER'replication_user'@'%' IDENTIFIED BY'replication_password';
    GRANT REPLICATION SLAVE ON *.* TO'replication_user'@'%';
    FLUSH PRIVILEGES;
    
    • MASTER_LOG_FILEMASTER_LOG_POS可以通过在master上执行SHOW MASTER STATUS命令获取。
  3. 启动slave的IO线程
    • 在slave上执行START SLAVE;命令启动复制,此时slave的IO线程开始工作。
    • 连接建立过程
      • slave的IO线程根据配置的MASTER_HOSTMASTER_USERMASTER_PASSWORD尝试与master建立TCP连接。
      • 连接成功后,IO线程向master发送请求,请求获取从指定的MASTER_LOG_FILEMASTER_LOG_POS位置开始的二进制日志事件。
      • master验证slave的连接请求,确认replication_user的权限等信息。如果验证通过,master开始向slave发送二进制日志事件。
    • 关键参数
      • MASTER_HEARTBEAT_PERIOD:可选参数,用于设置master发送心跳包的时间间隔(以秒为单位),默认值为0,表示不使用心跳机制。当设置为非零值时,master会按照指定的时间间隔向slave发送心跳包,以保持连接活跃并检测连接状态。例如:
      CHANGE MASTER TO MASTER_HEARTBEAT_PERIOD = 10;
      
      • MASTER_CONNECT_RETRY:表示slave在连接master失败后,重新尝试连接的时间间隔(以秒为单位)。默认值是60秒。如果连接失败,IO线程会按照这个时间间隔不断尝试连接master。
  4. 持续获取二进制日志事件
    • slave的IO线程持续从master获取二进制日志事件,并将其写入到本地的中继日志(relay log)中。
    • 当网络等原因导致连接中断时,IO线程会根据MASTER_CONNECT_RETRY设置的时间间隔尝试重新连接master,并从上次中断的位置继续获取二进制日志事件。

通过以上步骤和配置,slave的IO线程能够与master建立连接并持续获取二进制日志事件,实现数据的复制。