• MySQL主从失败, 错误Got fatal error 1236解决方法


     由于主服务器异外重启, 导致从报错, 错误如下:

    show slave status错误:

    1. mysql> show slave statusG 
    2. Master_Log_File: mysql-bin.000288 
    3. Read_Master_Log_Pos: 627806304 
    4. Relay_Log_File: mysql-relay-bin.000990 
    5. Relay_Log_Pos: 627806457 
    6. Relay_Master_Log_File: mysql-bin.000288 
    7. Slave_IO_Running: No 
    8. Slave_SQL_Running: Yes 
    9. Exec_Master_Log_Pos: 627806304 
    10. Relay_Log_Space: 627806663 
    11. ...... 
    12. Last_IO_Error: Got fatal error 1236 from master when  reading data from binary log: 
    13. 'Client requested master to start  replication from impossible position' 

    mysql错误日志:

    1. tail /data/mysql/mysql-error.log 
    2. 111010 17:35:49 [ERROR] Error reading packet from server: Client requested master 
    3.  to start replication from impossible position ( server_errno=1236) 
    4. 111010 17:35:49 [ERROR] Slave I/O: Got fatal error 1236 from master when reading data 
    5. from binary log: 'Client requested master to start replication from impossible 
    6. position', Error_code: 1236 
    7. 111010 17:35:49 [Note] Slave I/O thread exiting, read up to log 'mysql-bin.000288', 
    8. position 627806304 

    按照习惯, 先尝试必改position位置.

    1. mysql> stop slave; 
    2. mysql> change master to master_log_file='mysql-bin.000288',master_log_pos=627625751; 
    3. mysql> start slave; 

    错误依旧, 接下来登陆到主服务器查看binlog日志.
    先按照错误点的标记去主服务器日志中查找:

    1. [root@db1 ~]# mysqlbinlog --start-position=627655136 /data/mysql/binlog/mysql-bin.000288 
    2. /*!40019 SET @@session.max_insert_delayed_threads=0*/; 
    3. /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; 
    4. DELIMITER /*!*/; 
    5. at 4 
    6. #111010 13:31:19 server id 4 end_log_pos 106 Start: binlog v 4, server v 5.1.45-log 
    7. created 111010 13:31:19 
    8. # Warning: this binlog is either in use or was not closed properly. 
    9. BINLOG ' 
    10. F1aTTg8EAAAAZgAAAGoAAAABAAQANS4xLjQ1LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
    11. AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC 
    12. '/*!*/; 
    13. DELIMITER ; 
    14. End of log file 
    15. ROLLBACK /* added by mysqlbinlog */; 
    16. /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; 

    没有看到这个位置.

    1. [root@db1 ~]# mysqlbinlog /data/mysql/binlog/mysql-bin.000288 > test.txt 
    2.  
    3. less text.txt 
    4. 看最后一部分 
    5. at 627625495 
    6. #111010 16:35:46 server id 1 end_log_pos 627625631 Query thread_id=45613333 
    7. exec_time=32758 error_code=0 
    8. SET TIMESTAMP=1318289746/*!*/; 
    9. delete from freeshipping_bef_update where part='AR-4006WLM' and code='' 
    10. /*!*/; 
    11. at 627625631 
    12. #111010 16:35:46 server id 1 end_log_pos 627625751 Query thread_id=45613333 
    13. exec_time=32758 error_code=0 
    14. SET TIMESTAMP=1318289746/*!*/; 
    15. delete from shippingFee_special where part='AR-4006WLM' 
    16. /*!*/; 
    17. DELIMITER ; 
    18. End of log file 
    19. ROLLBACK /* added by mysqlbinlog */; 
    20. /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; 

    找到最接近错误标记627655136的一个position是627625631.

    再回到slave机器上change master, 将postion指向这个位置.
     

    1. mysql> stop slave; 
    2. Query OK, 0 rows affected (0.00 sec) 
    3.  
    4. mysql> change master to master_log_file='mysql-bin.000288',master_log_pos=627625631; 
    5. Query OK, 0 rows affected (0.06 sec) 
    6.  
    7. mysql> start slave; 
    8. Query OK, 0 rows affected (0.00 sec) 

    再次查看:

    1. mysql> show slave statusG 
    2. *************************** 1. row *************************** 
    3. Slave_IO_State: Queueing master event to the relay log 
    4. Master_Host: 192.168.21.105 
    5. Master_User: rep 
    6. Master_Port: 3306 
    7. Connect_Retry: 10 
    8. Master_Log_File: mysql-bin.000289 
    9. Read_Master_Log_Pos: 25433767 
    10. Relay_Log_File: mysql-relay-bin.000003 
    11. Relay_Log_Pos: 630 
    12. Relay_Master_Log_File: mysql-bin.000289 
    13. Slave_IO_Running: Yes 
    14. Slave_SQL_Running: Yes 

    主从同步正常了, 同样的方法修复其它slave机器.

    转自于:https://blog.51cto.com/ritto/735810

  • 相关阅读:
    YbSoftwareFactory 代码生成插件【二十】:DynamicObject的序列化
    YbSoftwareFactory 代码生成插件【十九】:实体类配合数据库表字段进行属性扩展的小技巧
    YbSoftwareFactory 代码生成插件【十八】:树形结构下的查询排序的数据库设计
    YbSoftwareFactory 代码生成插件【十七】:先进的权限模型体系设计
    YbSoftwareFactory 代码生成插件【十六】:Web 下灵活、强大的审批流程实现(含流程控制组件、流程设计器和表单设计器)
    YbSoftwareFactory 代码生成插件【十五】:Show 一下最新的动态属性扩展功能与键值生成器功能
    YbSoftwareFactory 代码生成插件【十四】:通过 DynamicLinq 简单实现 N-Tier 部署下的服务端数据库通用分页
    YbSoftwareFactory 代码生成插件【十三】:Web API 的安全性
    Navicat 密码加密算法
    GitHub开源的超棒后台管理面板
  • 原文地址:https://www.cnblogs.com/rui517hua20/p/10422636.html
Copyright © 2020-2023  润新知