面试题答案
一键面试可能的原因
- 网络连接问题
- 主库和从库之间网络不通,如防火墙阻止了主从库之间的通信端口(通常是MariaDB的3306端口)。
- 网络不稳定,存在丢包等情况,导致数据传输失败。
- 主从配置错误
- 从库配置的主库信息有误,例如主库的IP地址、端口、复制账号密码等配置错误。
- 主库没有开启二进制日志功能(log - bin参数未正确配置),导致无法记录主库数据变更,从而无法同步给从库。
- 从库的server - id与其他节点冲突,在主从复制架构中每个节点的server - id必须唯一。
- 复制位点信息错误
- 从库记录的主库复制位点(如Master_Log_File和Read_Master_Log_Pos)不正确,导致无法从正确位置开始同步。这可能是由于从库重启、主库切换等操作后没有正确更新位点信息。
- 主库数据问题
- 主库上的数据存在损坏或不完整的情况,导致从库在同步时遇到错误。例如,主库上的表结构不完整,或者存在非法数据等。
- 权限问题
- 从库使用的复制账号在主库上的权限不足,如没有REPLICATION SLAVE权限,无法读取主库的二进制日志进行同步。
利用STOP SLAVE命令辅助排查和解决问题
- 检查网络连接
- 使用
STOP SLAVE
停止从库复制线程。 - 利用网络工具(如ping、telnet等)检查主从库之间的网络连接是否正常。例如,在从库服务器上执行
telnet <主库IP> 3306
,如果能成功连接,说明网络端口未被阻塞;若连接失败,需检查防火墙设置,可尝试临时关闭防火墙或开放3306端口进行测试。
- 使用
- 检查主从配置
- 执行
STOP SLAVE
停止复制。 - 检查从库的配置文件(通常是my.cnf),确认主库信息配置正确,包括主库的IP地址、端口、复制账号密码等。例如:
- 执行
[mysqld]
server - id = <唯一ID>
relay - log = <relay - log文件名>
log - bin = <bin - log文件名>
master - host = <主库IP>
master - user = <复制账号>
master - password = <复制账号密码>
master - port = <主库端口>
- 登录主库,检查二进制日志是否开启,通过`SHOW VARIABLES LIKE 'log_bin';`命令查看,如果`log_bin`的值为`OFF`,需要修改主库配置文件开启二进制日志功能,重启主库生效。
- 确保每个节点(包括主库和从库)的`server - id`唯一,可在各节点通过`SHOW VARIABLES LIKE'server_id';`查看,若有冲突,修改从库的`server - id`并重启从库。
3. 修正复制位点信息
- 执行STOP SLAVE
停止从库复制。
- 在主库上执行SHOW MASTER STATUS;
命令,记录下File
和Position
的值。
- 在从库上使用CHANGE MASTER TO
命令重新设置主库的复制位点信息,例如:
CHANGE MASTER TO
MASTER_HOST = '<主库IP>',
MASTER_USER = '<复制账号>',
MASTER_PASSWORD = '<复制账号密码>',
MASTER_LOG_FILE = '<主库SHOW MASTER STATUS显示的File值>',
MASTER_LOG_POS = <主库SHOW MASTER STATUS显示的Position值>;
- 重新执行`START SLAVE`启动从库复制。
4. 检查主库数据
- 执行STOP SLAVE
停止从库复制。
- 在主库上对数据进行检查和修复,例如使用CHECK TABLE
命令检查表结构完整性,REPAIR TABLE
命令修复损坏的表。例如:
CHECK TABLE <表名>;
REPAIR TABLE <表名>;
- 修复完成后,在从库上重新执行`START SLAVE`尝试同步数据。
5. 检查权限
- 执行STOP SLAVE
停止从库复制。
- 在主库上使用SHOW GRANTS FOR '<复制账号>'@'<从库IP>';
命令查看复制账号权限,若没有REPLICATION SLAVE
权限,可使用以下命令授权:
GRANT REPLICATION SLAVE ON *.* TO '<复制账号>'@'<从库IP>' IDENTIFIED BY '<复制账号密码>';
FLUSH PRIVILEGES;
- 授权完成后,在从库上重新执行`START SLAVE`启动复制。