您好,欢迎访问一九零五行业门户网

MySQL Replication 遇到 error 1236错误的修复方法

mysql replication 遇到 error 1236 就有点麻烦了~ 通常都是 binlog 出问题造成的~ (master 或 slave 的 binlog 坏掉都有可能造成此错误) 通常遇到这个状况, 都是 slave 的 binlog 坏掉, 就 slave db 的资料重倒来解决, 但是此次遇到是 master 的 binlog 坏
mysql replication 遇到 error 1236 就有点麻烦了~ 通常都是 binlog 出问题造成的~ (master 或 slave 的 binlog 坏掉都有可能造成此错误)
通常遇到这个状况, 都是 slave 的 binlog 坏掉, 就 slave db 的资料重倒来解决, 但是此次遇到是 master 的 binlog 坏掉, 就有点苦了~
错误讯息如下:
last_io_errno: 1236
last_io_error: got fatal error 1236 from master when reading data from binary log: 1client requested master to start replication from impossible position2 the first event 1mysql-bin.0035831 at 45997491, the last event read from 1./mysql-bin.0035831 at 4, the last byte read from 1./mysql-bin.0035831 at 4.1
mysql replication 遇到 got fatal error 1236 from master 修復
mysql> show slave statusg
错误讯息如下: (已经把不必要得删除)
master_log_file: mysql-bin.003583
read_master_log_pos: 45997491
relay_log_file: mysqld-relay-bin.006789
relay_log_pos: 103569723
relay_master_log_file: mysql-bin.003361
slave_io_running: no
slave_sql_running: yes
last_errno: 0
skip_counter: 0
last_io_errno: 1236 last_io_error: got fatal error 1236 from master when reading data from binary log: 1client requested master to start replication from impossible position2 the first event 1mysql-bin.0035831 at 45997491, the last event read from 1./mysql-bin.0035831 at 4, the last byte read from 1./mysql-bin.0035831 at 4.1
註: debian / ubuntu linux 预设 mysql data path: /var/lib/mysql, 所以下述 binlog 可於此路径寻找.
slave binlog 坏掉的解法
一般常见是 slave binlog 坏掉, 所以都会先去 slave 找 mysql-bin.003583 档案.
再把 mysql-bin.003583 的资料用 mysqlbinlog dump 出来, 指到下一个 position 即可.
slave: ls /var/lib/mysql/mysql-bin.003583 # not found.
slave 不存在档案, 才发现到坏的是 master.
master binlog 坏掉的解法
master: # mysqlbinlog /var/lib/mysql/mysql-bin.003583 > ~/3583
error: error in log_event::read_log_event(): 1read error1, data_len: 27, event_type: 16
最苦的状况是 master 的 binlog 坏掉了, 所以所有 slave 都死光光. xd
此时可以考虑几种作法:
全部 slave 重倒 (最保险, no data lost)
先让 replication 可以啟动, 再来 重倒 / sync 一定需要同步的资料即可. (cache … 那种就可以不用理他)
下面是採用第二种作法:
mysql> stop slave2
mysql> change master to master_log_file = 1mysql-bin.0035841, master_log_pos = 02 # 先指到下一个 binlog 档, pos 指 0 或 4, 都是一样意思.
mysql> start slave2
mysql> show slave status g # 於此应该就恢復了.
然后在对重要的 table 用 pt-table-sync 来补一补即可. (apt-get install percona-toolkit)

其它类似信息

推荐信息