mysql主A服务器出现OS异常重启,数据库启动后表现正常。另外一个从数据库B服务器报错:

120611 11:05:53 [Note] Slave I/O thread: connected to master '用作数据库连接的用户IP',  replication started in log 'mysql-bin.000825' at position 665931642
120611 11:05:53 [ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236)
120611 11:05:53 [ERROR] Got fatal error 1236: 'Client requested master to start replication from impossible position' from master when reading data from binary log

进入从库B查看show salve status;

Slave_IO_Running: No

Slave_IO_Running线程终止。仔细看上面的报错信息,说slave进程试图从mysql-bin.
000825日志的 position 665931642开始启动恢复,但是该日志中是没有这个position的。

跑 到A上通过mysqlbinlog查看该日志,发现最后一个有效position是665928083。而要求的665928083已经大于最后有效的 position了。这个原因就搞不明白了,难道是因为A库异常关闭后导致A节点的binlog没有来得及刷到磁盘,而B节点slave已经恢复到前面去 了?

$mysqlbinlog mysql-bin.000825 >
mysql_bin825.txt

$tail -n 8 mysql_bin825.txt
# at 665928083
#120610 12:43:57 server id 1  end_log_pos 665928350     Query   thread_id=5092265       exec_time=0     error_code=0

尝试将B节点change master到最后一个有效的position处,问题暂时得到解决:

slave stop;

change master to master_log_file='mysql-bin.
000825', master_log_pos=665928083

slave start;