面试题答案
一键面试网络方面
- 原因:
- 主从库之间网络不通,如防火墙规则限制了主从库之间特定端口(默认MySQL/MariaDB复制端口3306)的通信。
- 网络不稳定,出现频繁丢包等情况。
- 排查步骤:
- 在从库上使用
ping
命令检查与主库的网络连通性,例如ping <主库IP>
。 - 使用
telnet <主库IP> 3306
命令检查主库的3306端口是否可访问。若无法访问,需联系网络管理员排查网络问题或检查防火墙设置。 - 可以在主从库之间进行
traceroute
操作,查看数据包传输路径,确定网络故障点。
- 在从库上使用
- 解决方法:
- 如果是防火墙问题,在主从库上开放3306端口,例如在Linux系统中,使用
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
命令(不同系统防火墙设置方式可能不同)。 - 对于网络不稳定问题,联系网络管理员解决网络线路等相关问题。
- 如果是防火墙问题,在主从库上开放3306端口,例如在Linux系统中,使用
权限方面
- 原因:
- 主库上没有为从库配置正确的复制用户及权限。
- 从库使用的复制用户密码错误。
- 排查步骤:
- 在主库上使用
SHOW GRANTS FOR '复制用户名'@'从库IP';
语句查看复制用户权限,确保具有REPLICATION SLAVE
权限。 - 检查从库配置文件中设置的复制用户密码是否与主库中该用户密码一致。
- 在主库上使用
- 解决方法:
- 在主库上为从库创建具有
REPLICATION SLAVE
权限的用户,例如CREATE USER '复制用户名'@'从库IP' IDENTIFIED BY '密码'; GRANT REPLICATION SLAVE ON *.* TO '复制用户名'@'从库IP'; FLUSH PRIVILEGES;
- 如果密码错误,在从库配置文件中修改为正确密码,并重启MariaDB服务。
- 在主库上为从库创建具有
配置文件方面
- 原因:
- 主库配置文件中未正确配置
server-id
,或配置的log-bin
参数不正确,导致无法生成二进制日志。 - 从库配置文件中
server-id
与主库重复,或relay-log
等参数配置错误。 - 主从库的
gtid_mode
等复制相关全局参数不一致。
- 主库配置文件中未正确配置
- 排查步骤:
- 检查主库的
my.cnf
文件,确认server-id
唯一且log-bin
参数配置正确,例如server-id=1
,log-bin=/var/lib/mysql/mysql-bin.log
。同时查看gtid_mode
等参数设置。 - 检查从库的
my.cnf
文件,确保server-id
与主库不同且唯一,relay-log
等参数配置正确,例如server-id=2
,relay-log=/var/lib/mysql/mysql-relay-bin.log
。同时对比gtid_mode
等参数与主库是否一致。
- 检查主库的
- 解决方法:
- 根据排查结果,在主库或从库的
my.cnf
文件中修改相应配置参数,修改后重启MariaDB服务。例如,修改主库server-id
后,重启主库MariaDB服务。修改从库相关参数后,重启从库MariaDB服务。
- 根据排查结果,在主库或从库的
其他方面
- 原因:
- 主库二进制日志损坏,导致从库无法正确读取。
- 主从库版本兼容性问题,某些版本间的复制功能存在差异。
- 排查步骤:
- 在主库上检查二进制日志文件是否存在损坏,例如查看日志文件大小是否异常,或使用相关工具(如
mysqlbinlog
)尝试解析日志文件。 - 确认主从库的MariaDB版本,查看官方文档了解版本间复制兼容性问题。
- 在主库上检查二进制日志文件是否存在损坏,例如查看日志文件大小是否异常,或使用相关工具(如
- 解决方法:
- 如果二进制日志损坏,尝试从备份中恢复正确的二进制日志,或重新初始化主库复制设置(可能需要重新配置主从同步)。
- 对于版本兼容性问题,根据官方文档进行版本升级或降级,使其兼容复制功能。