面试题答案
一键面试- 查看从库状态
- 使用命令
SHOW SLAVE STATUS \G
。此命令可以获取从库复制的详细状态信息,关键参数如下:Seconds_Behind_Master
:表示从库延迟主库的秒数,若数值较大,说明存在明显延迟。Slave_IO_Running
和Slave_SQL_Running
:这两个参数应该都为Yes
,若其中一个为No
,表示对应的线程出现问题,可能是复制中断的原因。
- 使用命令
- 网络问题排查
- 检查主从服务器之间的网络连接,可以使用
ping
命令测试网络连通性和延迟。如果网络不稳定,可能导致数据传输延迟或中断。 - 查看防火墙设置,确保主从服务器之间用于数据库复制的端口(默认为3306)是开放的。在Linux系统中,可以使用
iptables -L
命令查看防火墙规则,必要时使用iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
等命令开放端口。
- 检查主从服务器之间的网络连接,可以使用
- 主库负载排查
- 在主库上使用
SHOW STATUS LIKE 'Threads_connected';
查看当前连接数,连接数过高可能导致主库处理事务缓慢,间接影响从库同步。 - 使用
SHOW FULL PROCESSLIST;
查看主库上正在执行的线程,若存在长时间运行的事务,可能是导致主库性能问题的原因,可考虑优化或终止这些事务。
- 在主库上使用
- 从库负载排查
- 在从库上使用
top
命令查看系统资源使用情况,如CPU、内存、磁盘I/O等。如果从库负载过高,可能无法及时处理主库发送过来的二进制日志。 - 查看从库磁盘空间是否充足,可使用
df -h
命令。若磁盘空间不足,可能导致从库写入中继日志失败,进而导致复制中断。
- 在从库上使用
- 中继日志相关排查
- 查看从库中继日志的状态,关键参数
Relay_Log_Space
在SHOW SLAVE STATUS \G
输出中,若中继日志空间增长异常,可能是从库应用中继日志缓慢。 - 可以尝试清理过期的中继日志,在从库上使用
PURGE BINARY LOGS BEFORE '2024 - 01 - 01 00:00:00';
(这里时间为示例,需根据实际情况调整),此命令会删除指定时间之前的二进制日志和中继日志,但要确保从库已经完全应用了这些日志。
- 查看从库中继日志的状态,关键参数
- 主从复制配置参数排查
- 主库上检查
log - bin
参数是否正确配置,确保二进制日志功能开启,一般在my.cnf
配置文件中添加或确认log - bin = /var/lib/mysql/mysql - bin
(路径可根据实际情况调整)。 - 从库上检查
server - id
参数,确保每个从库有唯一的server - id
,如在my.cnf
中设置server - id = 2
(不同从库server - id
不同)。 - 还可以考虑调整
sync - binlog
参数,它控制二进制日志刷新到磁盘的频率,若设置为1,每次事务都会刷新,安全性高但性能可能受影响,可根据实际情况调整,如设置为0(由操作系统控制刷新)或较大数值(如1000)。
- 主库上检查
- 解决复制中断问题
- 如果
Slave_IO_Running
为No
,可能是网络或主库连接相关问题,检查网络和主库配置后,在从库上使用STOP SLAVE;
停止复制,然后使用CHANGE MASTER TO
命令重新配置主库连接信息,例如:
配置完成后使用CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='复制用户', MASTER_PASSWORD='复制密码', MASTER_LOG_FILE='主库二进制日志文件名', MASTER_LOG_POS=主库二进制日志位置;
START SLAVE;
重新启动复制。 - 如果
Slave_SQL_Running
为No
,可能是从库应用中继日志出现错误,查看Last_SQL_Error
参数获取错误信息。常见错误如主从库表结构不一致等,根据错误信息修复问题后,在从库上使用STOP SLAVE;
,然后使用SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
跳过当前导致错误的事务(谨慎使用,可能丢失数据一致性),最后使用START SLAVE;
重新启动复制。
- 如果