新设置mysql主从机,MySQL主从失败 错误Got fatal error 1236

本文详细介绍了遇到MySQL主从同步时报错Got fatal error 1236时的排查步骤及解决方法。通过检查日志、定位问题位置并调整master_log_file和master_log_pos参数,最终实现主从同步恢复正常。

                                                                          MySQL主从失败 错误Got fatal error 1236解决方法
新设置的主从mysql服务器, 报错, 错误如下:
show slave status错误:
mysql> show slave status\G
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 627806304
Relay_Log_File: mysql-relay-bin.000990
Relay_Log_Pos: 627806457
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: No
Slave_SQL_Running: Yes
Exec_Master_Log_Pos: 627806304
Relay_Log_Space: 627806663

......
Last_IO_Error: Got fatal error 1236 from master when  reading data from binary log:
'Client requested master to start  replication from impossible position'mysql错误日志:

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

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

mysql> stop slave;
mysql> change master to master_log_file='mysql-bin.000001',master_log_pos=627625751;
mysql> start slave;错误依旧, 接下来登陆到主服务器查看binlog日志.
先按照错误点的标记去主服务器日志中查找:

[root@db1 ~]# mysqlbinlog --start-position=627655136 /var/lib/mysql/mysql-bin.000001
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#111010 13:31:19 server id 4 end_log_pos 106 Start: binlog v 4, server v 5.1.45-log
created 111010 13:31:19
# Warning: this binlog is either in use or was not closed properly.
BINLOG '
F1aTTg8EAAAAZgAAAGoAAAABAAQANS4xLjQ1LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;没有看到这个位置.

[root@db1 ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000001 > test.txt

less text.txt
看最后一部分
# at 627625495
#111010 16:35:46 server id 1 end_log_pos 627625631 Query thread_id=45613333
exec_time=32758 error_code=0
SET TIMESTAMP=1318289746/*!*/;
delete from freeshipping_bef_update where part='AR-4006WLM' and code=''
/*!*/;
# at 627625631
#111010 16:35:46 server id 1 end_log_pos 627625751 Query thread_id=45613333
exec_time=32758 error_code=0
SET TIMESTAMP=1318289746/*!*/;
delete from shippingFee_special where part='AR-4006WLM'
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;找到最接近错误标记627655136的一个position是627625631.

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

mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql> change master to master_log_file='mysql-bin.000001',master_log_pos=627625631;
Query OK, 0 rows affected (0.06 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)再次查看

mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Queueing master event to the relay log
Master_Host: 192.168.11.26
Master_User: rep
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 25433767
Relay_Log_File: mysql-relay-bin.000003
Relay_Log_Pos: 630
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes


主从同步正常了!

 

附:主从的快速设置方法:

1、要主机上修改my.cnf

server-id = 1

log-bin       #开启记录地进制日志功能,很重要

2、在主机上增加一个帐号,分配从机的复制权限:

grant replication slave on *.*  to 'test'@'192.168.11.27'  identified by '123456';

3、用mysqldump导出数据,导入到从机

4、设置slave主机,修改my.cnf:

server-id = 2

其它slave从机以此类推,保证ID的唯一。

5、开启同步:

在从机中执行如下命令:

mysql> change master to mastart_host='192.168.11.26(主机IP)',master_user='test',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=98;

mysql>slave start;

查看是否同步:

mysql>show slave status\G;

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.11.26
                  Master_User: test
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 107
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 107
              Relay_Log_Space: 410
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
1 row in set (0.00 sec)

如果:slave_io_runnung和slave_sql_running都为yes就表示成功。

 

 

### MySQL 主从复制配 #### 配主节点 为了实现MySQL主从复制,首先需要配主节点。这涉及到修改`my.cnf`文件中的设来启用二进制日志并指定唯一的服务器ID。 ```ini [mysqld] server-id=1 log-bin=mysql-bin binlog-format=MIXED ``` 上述配启用了二进制日志功能,并设了服务器ID为1[^3]。此外,通过设定`binlog-format`参数可以选择复制的方式,默认是混合模式(Mixed-mode Replication)[^1]。 #### 备份主节点数据 完成主节点的基础配之后,需创建一份完整的数据库快照用于初始化从节点。可以利用`mysqldump`工具导出整个数据库: ```bash mysqldump --all-databases --master-data > backup.sql ``` 此命令不仅会转储所有的表结构和数据,还会自动记录当前二进制日志的位信息以便后续同步使用。 #### 同步至从节点 将生成好的SQL脚本传输给目标器上的从节点,并导入其中: ```sql mysql < /path/to/backup.sql ``` 接着调整从节点的相关配项以匹配其角色需求——同样编辑`my.cnf`文件赋予不同于主节点的新ID号以及指向远程主的信息。 ```ini [mysqld] server-id=2 relay-log=mysql-relay-bin read-only=ON ``` 这里设定了读取只限权限(read-only),防止意外写入破坏一致性;同时指明了继电器日志(relay log)路径方便追踪变更历史。 ### MySQL 主从复制原理 MySQL主从复制制依赖于二进制日志(Binary Log)来跟踪发生在主服务器上的所有更改事件。每当有新的事务提交成功后,相应的更新会被追加到该文件内形成一系列的操作指令集。随后这些记录被传递给一个或多个订阅者(即所谓的“从”实例), 它们负责重放相同的动作从而保持与源头一致的状态。 具体来说存在三种不同的复制策略可供选择:基于行(Row-Based Replication,RBR)、基于语句(Statement-Based Replication,SBR) 和混合型(Mixed Mode Replication,MMR) 。前两者分别侧重于精确反映单条记录级别的变动或是概括性的SQL表达式描述整体行为特征;而后者则综合考虑两方面优势动态切换最合适的方案应用场合。 对于SBR而言,尽管占用资源相对较少却难以确保跨平台移植性和复杂查询场景下的准确性;相反地,RBR虽然消耗更多存储空间但提供了更高的可靠性和可维护性特性[^2]。 ### 故障排查方法论 当遇到诸如“Got fatal error 1236 from master”的错误提示时,意味着从库尝试获取不存在的日志文件(`mysql-bin.000004`) ,然而实际上主库仅存最早的几个版本(`mysql-bin.000001`) [^4]。这类问题往往源于时间差造成的不兼容状况或者是网络连接不稳定引起的丢包现象。 针对这种情况建议采取如下措施加以修复: - **重新建立初始状态** :停止现有进程链路关系,按照前述步骤再次执行全量迁移过程; - **手动修正偏移量** : 如果确认丢失部分不影响全局完整性,则可以在Slave端强制跳过特定位继续追赶进度; ```sql STOP SLAVE; CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=<适当数值>; START SLAVE; ``` 以上操作能够帮助恢复正常的运作秩序,不过务必谨慎行事以免引发更大范围内的异常波动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值