面试题答案
一键面试MySQL主从复制拓扑结构工作原理
- 二进制日志(Binary Log):主库在执行写操作(如INSERT、UPDATE、DELETE等)时,会将这些改变记录到二进制日志(也叫binlog)中。这个日志记录了数据库的所有更改操作,按照时间顺序依次记录。
- 从库连接主库:从库通过配置连接到主库,并告知主库从库想要从哪个位置开始接收日志。这个位置信息包括主库二进制日志文件名(log file)和日志偏移量(log position)。
- 主库发送日志:主库接收到从库的连接请求后,开启一个线程(I/O线程),根据从库提供的位置信息,将二进制日志内容发送给从库。
- 从库接收日志:从库也开启一个I/O线程来接收主库发送的二进制日志,并将其保存在中继日志(relay log)中。
- 从库重放日志:从库开启SQL线程,读取中继日志中的内容,并按照日志记录的顺序在从库上重新执行一遍,从而使从库的数据与主库保持一致。
搭建主从复制时主库关键配置
- 开启二进制日志:在MySQL配置文件(通常是my.cnf或my.ini)中,确保以下配置项存在并正确设置:
log-bin=mysql-bin
server-id=1
log-bin
指定二进制日志文件的前缀名。server-id
是MySQL实例的唯一标识,不同的MySQL实例(主库和从库)需要设置不同的值,主库这里设置为1,范围是1 - 2^32 - 1。
- 授予复制权限:登录到主库MySQL,执行以下SQL语句:
GRANT REPLICATION SLAVE ON *.* TO'replication_user'@'slave_ip' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
replication_user
是从库连接主库时使用的用户名,slave_ip
是从库的IP地址,password
是连接密码。
- 获取主库状态信息:执行以下SQL语句获取主库的二进制日志文件名和偏移量:
SHOW MASTER STATUS;
记录下File
和Position
的值,后续在从库配置时会用到。
搭建主从复制时从库关键配置
- 设置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_user
和password
与主库授予权限时设置的一致。master_log_file
和master_log_position
是从主库SHOW MASTER STATUS
获取的值。
- 启动从库复制:执行以下SQL语句启动从库复制:
START SLAVE;
- 检查从库状态:执行以下SQL语句检查从库复制状态:
SHOW SLAVE STATUS \G;
确保Slave_IO_Running
和Slave_SQL_Running
都为Yes
,并且Seconds_Behind_Master
的值较小(理想情况下为0,表示从库与主库数据同步没有延迟)。