MST

星途 面试题库

面试题:MySQL复制拓扑结构之主从复制

请阐述MySQL主从复制拓扑结构的工作原理,以及在搭建主从复制时,主库和从库分别需要进行哪些关键配置?
33.9万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

MySQL主从复制拓扑结构工作原理

  1. 二进制日志(Binary Log):主库在执行写操作(如INSERT、UPDATE、DELETE等)时,会将这些改变记录到二进制日志(也叫binlog)中。这个日志记录了数据库的所有更改操作,按照时间顺序依次记录。
  2. 从库连接主库:从库通过配置连接到主库,并告知主库从库想要从哪个位置开始接收日志。这个位置信息包括主库二进制日志文件名(log file)和日志偏移量(log position)。
  3. 主库发送日志:主库接收到从库的连接请求后,开启一个线程(I/O线程),根据从库提供的位置信息,将二进制日志内容发送给从库。
  4. 从库接收日志:从库也开启一个I/O线程来接收主库发送的二进制日志,并将其保存在中继日志(relay log)中。
  5. 从库重放日志:从库开启SQL线程,读取中继日志中的内容,并按照日志记录的顺序在从库上重新执行一遍,从而使从库的数据与主库保持一致。

搭建主从复制时主库关键配置

  1. 开启二进制日志:在MySQL配置文件(通常是my.cnf或my.ini)中,确保以下配置项存在并正确设置:
log-bin=mysql-bin
server-id=1
  • log-bin指定二进制日志文件的前缀名。
  • server-id是MySQL实例的唯一标识,不同的MySQL实例(主库和从库)需要设置不同的值,主库这里设置为1,范围是1 - 2^32 - 1。
  1. 授予复制权限:登录到主库MySQL,执行以下SQL语句:
GRANT REPLICATION SLAVE ON *.* TO'replication_user'@'slave_ip' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
  • replication_user是从库连接主库时使用的用户名,slave_ip是从库的IP地址,password是连接密码。
  1. 获取主库状态信息:执行以下SQL语句获取主库的二进制日志文件名和偏移量:
SHOW MASTER STATUS;

记录下FilePosition的值,后续在从库配置时会用到。

搭建主从复制时从库关键配置

  1. 设置server - id:在MySQL配置文件中设置唯一的server - id,如:
server-id=2

确保该值与主库的server - id不同。 2. 配置主库连接信息:登录到从库MySQL,执行以下SQL语句配置主库连接信息:

CHANGE MASTER TO
    MASTER_HOST='master_ip',
    MASTER_USER='replication_user',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='master_log_file',
    MASTER_LOG_POS=master_log_position;
  • master_ip是主库的IP地址。
  • replication_userpassword与主库授予权限时设置的一致。
  • master_log_filemaster_log_position是从主库SHOW MASTER STATUS获取的值。
  1. 启动从库复制:执行以下SQL语句启动从库复制:
START SLAVE;
  1. 检查从库状态:执行以下SQL语句检查从库复制状态:
SHOW SLAVE STATUS \G;

确保Slave_IO_RunningSlave_SQL_Running都为Yes,并且Seconds_Behind_Master的值较小(理想情况下为0,表示从库与主库数据同步没有延迟)。