MySQL主从同步报错1236本质是复制断点不可达,主库缺失从库请求的binlog文件或position,常见于binlog被purge、文件损坏、GTID配置错误、max_allowed_packet不一致或server_id冲突。

MySQL主从同步报错 Got fatal error 1236,绝大多数情况是由于从库请求的 binlog 文件或 position 已在主库上不存在——要么被 purged,要么压根没生成过。这不是网络或权限问题,而是复制链路的“断点不可达”。
确认主库是否已删除对应 binlog 文件
错误信息里通常会明确指出缺失的文件名,例如 'could not find next log; the first event 'm3306.019749' at 154, the last event read from '/data/mysql_3306/mysqllog/binlog/m3306.019750' at 4705'。关键就是 m3306.019749 和 m3306.019750 这两个文件。
- 登录主库,执行
SHOW BINARY LOGS;,看列表里有没有这两个文件名 - 如果没有,说明已被
PURGE BINARY LOGS或自动过期策略删掉 - 如果有,但文件实际不存在(比如磁盘损坏、路径配置错误),
ls -l /data/mysql_3306/mysqllog/binlog/m3306.019749会返回 no such file - 注意:
expire_logs_days和binlog_expire_logs_seconds(MySQL 8.0.28+)共同影响保留策略,不要只查一个参数
检查从库 Master_Log_File 和 Read_Master_Log_Pos 是否指向无效位点
执行 SHOW SLAVE STATUS\G,重点关注这两项:
-
Master_Log_File:从库当前想读的 binlog 文件名 -
Read_Master_Log_Pos:它想从这个文件的哪个偏移量开始读 - 即使文件存在,
Read_Master_Log_Pos也可能超出该文件实际长度(比如文件只有 10MB,但 position 要求从 12MB 开始读) - 用
mysqlbinlog --base64-output=DECODE-ROWS -v /path/to/m3306.019750 | tail -20查看文件末尾的end_log_pos,对比是否小于Read_Master_Log_Pos
GTID 模式下不能只靠 gtid_purged 设置就跳过问题
常见误区是:看到报错,就在从库执行 SET GLOBAL gtid_purged = 'xxx',然后 START SLAVE —— 很可能失败,甚至触发全量重拉。
-
gtid_purged必须包含从库自己已执行过的全部 GTID,而不仅是主库的gtid_purged值 - 设置前必须确保
gtid_executed为空,否则报错;清空方式是RESET MASTER,但这会清空本机所有 GTID 记录,慎用 - 更安全的做法是:先
STOP SLAVE,再用SELECT @@global.gtid_executed;获取本机已执行 GTID,和主库SELECT @@global.gtid_purged;合并去重后设置 - 合并示例:
SET GLOBAL gtid_purged = 'a1b2c3e4-5678-90ab-cdef-123456789012:1-100,a1b2c3e4-5678-90ab-cdef-123456789012:101-200';
修复后仍同步中断?重点核对 max_allowed_packet 和 server_id 冲突
1236 错误有时是表象,底层可能是通信失败或身份混淆。
- 主从
max_allowed_packet值不一致(尤其是主库更大),会导致大事务 binlog event 传不过去,报错中可能夹带log event entry exceeded max_allowed_packet - 克隆环境未修改
server_id或server_uuid(auto.cnf文件),会导致多个从库用同一身份连接主库,主库 purge binlog 时误判“已有从库跟上”,提前清理日志 -
SHOW PROCESSLIST在主库上查是否有多个相同server_id的Binlog Dump线程 - MariaDB 11.4+ 可用
slave_connections_needed_for_purge参数防止过早 purge,但 MySQL 原生无此机制,需靠运维控制
真正麻烦的不是定位 1236,而是判断它背后是数据丢失、配置漂移,还是单纯日志清理节奏不匹配。每次修复前,先用 SELECT @@global.gtid_executed; 和 SHOW BINARY LOGS; 对齐主从状态,比直接 CHANGE MASTER TO 更可靠。


















