[ERROR] Slave I/O: error connecting to master

刚配置的MySQL主从,在从机上看到 

点击(此处)折叠或打开 

mysql> SHOW slave STATUS \\G 

*************************** 1. row *************************** 

               Slave_IO_State: Connecting to master 

                  Master_Host: 172.17.210.199 

                  Master_User: my 

                  Master_Port: 3306 

                Connect_Retry: 60 

              Master_Log_File: masters-bin.000003 

          Read_Master_Log_Pos: 1224 

               Relay_Log_File: testmysql-relay-bin.000001 

                Relay_Log_Pos: 4 

        Relay_Master_Log_File: masters-bin.000003 

             Slave_IO_Running: Connecting 

            Slave_SQL_Running: Yes 

              Replicate_Do_DB: 

          Replicate_Ignore_DB: 

看日志有很多: 

点击(此处)折叠或打开 

141010 0:02:48 [ERROR] Slave I/O: error connecting to master \’my@172.17.210.199:3306\’ – retry-time: 60 retries: 1, Error_code: 2003 

141010 0:03:48 [ERROR] Slave I/O: error connecting to master \’my@172.17.210.199:3306\’ – retry-time: 60 retries: 2, Error_code: 2003 

141010 0:04:48 [ERROR] Slave I/O: error connecting to master \’my@172.17.210.199:3306\’ – retry-time: 60 retries: 3, Error_code: 2003 

141010 0:05:48 [ERROR] Slave I/O: error connecting to master \’my@172.17.210.199:3306\’ – retry-time: 60 retries: 4, Error_code: 2003 

141010 0:06:48 [ERROR] Slave I/O: error connecting to master \’my@172.17.210.199:3306\’ – retry-time: 60 retries: 5, Error_code: 2003 

141010 0:07:48 [ERROR] Slave I/O: error connecting to master \’my@172.17.210.199:3306\’ – retry-time: 60 retries: 6, Error_code: 2003 

解决方法:  

  

导致lave_IO_Running 为connecting 的原因主要有以下 3 个方面:  

  

1、网络不通  

2、密码不对  

3、pos不对 

解决步骤: 

1、对于第一个问题,一般情况下都是可以排除的,也是最容易排除的。 

2、在主库上修改用来复制的用户的密码。 

3、 在做chang to 的时候注意log_pos 是否跟此时主机的一样。在主机上 show master status \G ;可以查看到 

mysql> show master status \G; 

*************************** 1. row *************************** 

             File: masters-bin.000003 

         Position: 2392 

     Binlog_Do_DB: 

Binlog_Ignore_DB: 

Executed_Gtid_Set: 

1 row in set (0.00 sec) 

ERROR: 

No query specified 

从机上面执行change to 的正确 

CHANGE MASTER TO 

MASTER_HOST=’172.17.210.199′, 

MASTER_USER=’my’, 

MASTER_PASSWORD=’123456′, 

MASTER_LOG_FILE=’masters-bin.000003′, 

MASTER_LOG_POS= 2392; 

我的问题,就是主机的防火墙没有关闭 

==================================================================== 

由于主服务器异外重启, 导致从报错, 错误如下: 

show slave status错误: 

mysql> show slave status\G 

Master_Log_File: mysql-bin.000288 

Read_Master_Log_Pos: 627806304 

Relay_Log_File: mysql-relay-bin.000990 

Relay_Log_Pos: 627806457 

Relay_Master_Log_File: mysql-bin.000288 

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 /data/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.000288’, 

position 627806304 

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

mysql> stop slave; 

mysql> change master to master_log_file=’mysql-bin.000288′,master_log_pos=627625751; 

mysql> start slave; 

错误依旧, 接下来登陆到主服务器查看binlog日志. 

先按照错误点的标记去主服务器日志中查找: 

[root@db1 ~]# mysqlbinlog –start-position=627655136 /data/mysql/binlog/mysql-bin.000288 

/*!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 /data/mysql/binlog/mysql-bin.000288 > 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.000288′,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.21.105 

Master_User: rep 

Master_Port: 3306 

Connect_Retry: 10 

Master_Log_File: mysql-bin.000289 

Read_Master_Log_Pos: 25433767 

Relay_Log_File: mysql-relay-bin.000003 

Relay_Log_Pos: 630 

Relay_Master_Log_File: mysql-bin.000289 

Slave_IO_Running: Yes 

Slave_SQL_Running: Yes 

主从同步正常了, 同样的方法修复其它slave机器.

点赞