首页 > 数据库 > MySQL > 正文

MySQL Replication 遇到 Got fatal error 1236 from master 修复

2024-07-24 12:37:38
字体:
来源:转载
供稿:网友

MySQL Replication 遇到 error 1236 就有点麻烦了,通常都是 binlog 出问题造成的,Master 或 Slave 的 binlog 坏掉都有可能造成此错误.

通常遇到这个状况,都是 Slave 的 binlog 坏掉,就 Slave DB 的资料重倒来解决,但是此次遇到是 Master 的 binlog 坏掉,就有点苦了.

错误讯息如下:

  1. ■Last_IO_Errno: 1236 
  2. ■Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin.003583' at 45997491, the last event read from './mysql-bin.003583' at 4, the last byte read from './mysql-bin.003583' at 4.' 

MySQL Replication 遇到 Got fatal error 1236 from master 修复:

mysql> SHOW SLAVE STATUSG

错误讯息如下:已经把不必要得删除.

  1. Master_Log_File: mysql-bin.003583 
  2. Read_Master_Log_Pos: 45997491 
  3. Relay_Log_File: mysqld-relay-bin.006789 
  4. Relay_Log_Pos: 103569723 
  5. Relay_Master_Log_File: mysql-bin.003361 
  6. Slave_IO_Running: No 
  7. Slave_SQL_Running: Yes 
  8. Last_Errno: 0 
  9. Skip_Counter: 0  --Vevb.com 
  10. Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin.003583' at 45997491, the last event read from './mysql-bin.003583' at 4, the last byte read from './mysql-bin.003583' at 4.' 

?: Debian / Ubuntu Linux 预设 MySQL data path: /var/lib/mysql,所以下述 binlog 可於此路径寻找.

Slave binlog 坏掉的解法

1.一般常见是 Slave binlog 坏掉,所以都会先去 Slave 找 mysql-bin.003583 档案.

2.再把 mysql-bin.003583 的资料用 mysqlbinlog dump 出来,指到下一个 position 即可.

3.Slave: ls /var/lib/mysql/mysql-bin.003583 # not found.

4.Slave 不存在档案,才发现到坏的是 Master.

Master binlog 坏掉的解法

■Master: # mysqlbinlog /var/lib/mysql/mysql-bin.003583 > ~/3583

ERROR: Error in Log_event::read_log_event(): 'read error', data_len: 27, event_type: 16

■最苦的状况是 Master 的 binlog 坏掉了,所以所有 Slave 都死光光,XD

此时可以考虑几种作法:

1.全部 Slave 重倒 (最保险, no data lost)

2.先让 Replication 可以启动, 再来 重倒 / sync 一定需要同步的资料即可. (Cache ... 那种就可以不用理他).

解决实例代码如下:

  1. mysql> STOP SLAVE; 
  2. mysql> CHANGE MASTER TO master_log_file = 'mysql-bin.003584', master_log_pos = 0; # 先指到下一个 binlog 档, pos 指 0 或 4, 都是一样意思. 
  3. mysql> START SLAVE; 
  4. mysql> SHOW SLAVE STATUS G # 於此应该就恢复了. 

然后在对重要的 Table 用 pt-table-sync 来补一补即可,apt-get install percona-toolkit.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表