面试题答案
一键面试1. 主要线程
- 主库:Binlog Dump Thread:当从库连接主库时,主库创建此线程,负责读取主库的二进制日志(binlog),并将其发送给从库。
- 从库:I/O Thread:负责连接主库,向主库的Binlog Dump Thread请求二进制日志,并将接收到的日志内容写入到本地的中继日志(relay log)中。
- 从库:SQL Thread:从库的SQL Thread负责读取中继日志中的事件,并在从库上执行这些事件,从而使从库的数据与主库保持一致。
2. 基本同步流程
- 配置主库:
- 在主库的配置文件(如
my.cnf
)中启用二进制日志功能,设置唯一的服务器ID(server-id
)等相关参数。 - 创建用于主从复制的用户,并授予
REPLICATION SLAVE
权限。例如:CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%'; FLUSH PRIVILEGES;
- 获取主库状态信息,如二进制日志文件名(
show master status;
),记录日志文件名和日志位置,后续从库配置需要用到。
- 在主库的配置文件(如
- 配置从库:
- 在从库的配置文件中设置唯一的
server-id
。 - 使用
CHANGE MASTER TO
语句配置主库连接信息,包括主库的IP地址、端口、复制用户、密码以及主库二进制日志文件名和位置。例如:CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='master_binlog_file', MASTER_LOG_POS=master_log_position;
- 在从库的配置文件中设置唯一的
- 启动复制:在从库执行
START SLAVE;
命令启动主从复制。 - 同步过程:
- 连接建立:从库的I/O Thread连接到主库,向主库发送请求,请求获取二进制日志。主库的Binlog Dump Thread响应请求。
- 日志传输:Binlog Dump Thread开始读取主库的二进制日志,并将日志内容发送给从库的I/O Thread。I/O Thread将接收到的日志写入到本地的中继日志文件中,并记录中继日志的位置。
- 日志执行:从库的SQL Thread读取中继日志中的事件,按照顺序在从库上执行这些事件,从而更新从库的数据,使其与主库保持同步。同时,SQL Thread也会记录当前执行到中继日志的位置。
- 监控与维护:可以使用
SHOW SLAVE STATUS\G
命令在从库查看复制状态,确保Slave_IO_Running
和Slave_SQL_Running
都为Yes
,并且Seconds_Behind_Master
的值为0或接近0,表明主从复制正常工作。