一次mysql同步错误一解
今天又做了一次mysql同步。而且是跨机房的。
做完之后自然使用以下命令看看同步效果如何。
mysql> show slave statusG;
但是奇怪的事情发生了。得到的结果居然是这样的
*************************** 1. row ***************************
Slave_IO_State: Checking master version
Master_Host: 1.1.1.1
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000035
Read_Master_Log_Pos: 415080471
Relay_Log_File: foreign-1-relay-bin.000378
Relay_Log_Pos: 175787666
Relay_Master_Log_File: mysql-bin.000035
Slave_IO_Running: No
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: 415080471
Relay_Log_Space: 175787666
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
1 row in set (0.00 sec)
ERROR:
No query specified
这就奇怪了阿,而且多次show slave statusG;后得到的 Slave_IO_State: 结果却一直都在改变,具体状态可以参考http://dev.mysql.com/doc/refman/5.1/zh/replication.html#slave-io-thread-states
而Slave_IO_Running:的状态也一直在Yes和No之间转换。
而一个正常的slave状态是Slave_IO_State: Waiting for master to send event, 而Slave_IO_Running:状态应该一直都是Yes才对。
看mysql的err日志里也没有对应的信息出现。所以一开始以为是自己2个机房之间的连接链路有啥问题,于是特地测试了一下,但是发现一切都很正常。
这时候突然想到这个slave数据库一开始是作为另外一个数据库的slave数据库,于是查看了一下my.cnf中server-id,发现这个slave数据库的server-id = 2, 这就对了。很明显是跟其它slave数据库的server-id重复了,导致2个不同的slave数据库都去抢同样的server-id,这样就好比2个短跑选手非要去跑到一个跑道上,互相干扰到了对方。于是前面的Slave_IO_State状态的变化也可以很好的解释了。