MST

星途 面试题库

面试题:MariaDB中Slave IO线程如何获取主库的二进制日志事件

请详细阐述MariaDB中Slave IO线程从主库获取二进制日志事件的具体流程,包括涉及到的网络连接、协议以及相关配置参数的影响。
16.8万 热度难度
数据库MariaDB

知识考点

AI 面试

面试题答案

一键面试

1. 网络连接

  • TCP连接建立:Slave的IO线程会主动与Master建立TCP连接。在MariaDB配置中,Master需要监听特定的IP和端口(通常为3306),Slave通过配置的Master主机地址、端口信息来发起连接请求。例如,在Slave的配置文件(如my.cnf)中通过master_host指定Master的IP地址,master_port指定端口。

2. 协议交互

  • 握手阶段
    • 连接建立后,Slave IO线程会发送握手包给Master,其中包含自身的一些信息,如客户端版本、能力标志等。Master收到握手包后,会验证并回复包含认证信息(如密码加密方式等)的握手响应包。
    • Slave根据Master的响应,使用合适的加密方式对配置中的master_password进行加密,并再次发送给Master进行认证。
  • 请求二进制日志事件阶段
    • 认证通过后,Slave IO线程发送COM_BINLOG_DUMP命令给Master,这个命令中携带了Slave已经同步到的Master二进制日志文件名(master_log_file)和位置(master_log_pos)。
    • Master接收到该命令后,从指定的位置开始读取二进制日志事件,并将这些事件以Packet的形式发送给Slave。每个Packet包含一定量的二进制日志数据。
    • Slave IO线程持续接收这些Packet,并将其写入到本地的中继日志(relay log)中。

3. 相关配置参数的影响

  • Master配置参数
    • log-bin:开启二进制日志功能,只有开启此参数,Master才会记录二进制日志,Slave才能从中获取事件进行同步。例如:log-bin=/var/lib/mysql/mysql-bin.log
    • server-id:每个MySQL/MariaDB实例都需要有唯一的server-id,Master通过它来标识自己。在主从复制环境中,不同节点的server-id不能重复。例如:server-id=1
  • Slave配置参数
    • server-id:同样,Slave也需要有唯一的server-id,与Master及其他Slave区分开来。例如:server-id=2
    • master_hostmaster_usermaster_passwordmaster_port:这些参数用于配置Slave连接Master的基本信息,如主机地址、用户名、密码和端口。
    • relay_log:指定中继日志的路径和文件名,Slave IO线程接收到的二进制日志事件会写入到此中继日志中。例如:relay_log=/var/lib/mysql/relay-log-bin
    • read_only:设置为1时,Slave节点将处于只读模式,防止从库上的意外写入操作影响复制。但拥有SUPER权限的用户不受此限制。例如:read_only=1