MST
星途 面试题库

面试题:MySQL中继日志故障处理与复制恢复

假设在MySQL主从复制过程中,中继日志出现损坏,导致复制中断。请详细描述排查故障的步骤,以及如何在不丢失数据的前提下恢复复制功能,涉及到相关命令和配置调整的细节。
41.8万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

排查故障步骤

  1. 检查中继日志状态
    • 使用 SHOW SLAVE STATUS \G 命令查看中继日志相关信息,重点关注 Relay_Log_FileRelay_Log_Pos 等字段,确认当前中继日志的使用情况。
  2. 检查错误日志
    • 查看MySQL从服务器的错误日志(通常在MySQL数据目录下,文件名类似 hostname.err),查找与中继日志损坏相关的错误信息,例如“Relay log read failure”等提示,这能帮助定位损坏发生的具体时间和可能原因。
  3. 备份当前中继日志
    • 在进行任何修复操作前,先备份当前损坏的中继日志文件,以防后续分析或数据恢复需要。可使用操作系统命令(如 cp 命令在Linux系统下)将中继日志文件复制到安全的位置。

恢复复制功能步骤

  1. 获取主服务器二进制日志位置
    • 在主服务器上执行 SHOW MASTER STATUS 命令,记录下 FilePosition 字段的值,这是从服务器需要同步的主服务器二进制日志位置。
  2. 跳过损坏的中继日志事件
    • 在从服务器上,通过设置 sql_slave_skip_counter 系统变量来跳过损坏的中继日志事件。例如,如果确定中继日志在某个位置开始损坏,可以先停止复制:
    STOP SLAVE;
    SET GLOBAL sql_slave_skip_counter = 1; # 根据实际情况调整跳过的事件数
    START SLAVE;
    
    • 然后再次使用 SHOW SLAVE STATUS \G 命令查看复制状态,确保 Slave_IO_RunningSlave_SQL_Running 都为 Yes,且 Seconds_Behind_Master 逐渐减小,表明复制正在恢复。
  3. 重新配置从服务器
    • 如果跳过事件无法解决问题,可以考虑重新配置从服务器。
    • 首先停止从服务器复制:
    STOP SLAVE;
    
    • 然后重置从服务器:
    RESET SLAVE;
    
    • 接着使用 CHANGE MASTER TO 命令重新配置从服务器连接到主服务器,并指定之前记录的主服务器二进制日志位置:
    CHANGE MASTER TO
        MASTER_HOST='主服务器IP',
        MASTER_USER='复制用户',
        MASTER_PASSWORD='复制用户密码',
        MASTER_LOG_FILE='主服务器二进制日志文件名',
        MASTER_LOG_POS=主服务器二进制日志位置;
    
    • 最后启动从服务器复制:
    START SLAVE;
    
  4. 验证复制状态
    • 持续使用 SHOW SLAVE STATUS \G 命令监控从服务器复制状态,确保数据同步正常进行,并且没有新的错误出现。同时,可以对比主从服务器上的数据一致性,例如通过查询关键表的记录数和校验和等方式验证数据完整性。