配置MySQL主从服务时:

故障现象:

mysql> show slave status\G

         .......
 
            Relay_Log_File: localhost-relay-bin.000535
 
             Relay_Log_Pos: 21795072
 
     Relay_Master_Log_File: localhost-bin.000094
 
          Slave_IO_Running: Yes
 
         Slave_SQL_Running: No
            Replicate_Do_DB: 
        Replicate_Ignore_DB: 
      ......


mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是Slave_IO_Running,一个是slave_sql_running,一个负责与主机的io通信,一个负责自己的slave mysql进程

下面写一下,这两个的状态要是有no或者connecting了,怎么恢复


如果是Slave_IO_Running 为connecting,只要是三个原因:

1、网络不通  解决方法:在slave服务器上Telnet  master_ip 3306 或者mysql -uusername -ppassword -hmasterip 试试能否链接上

2、密码不对  查看密码是否正确

3、pos值不对  查看主从上的pos值是否一致

如果是Slave_IO_Running为NO,个人认为有三种情况,一个是网络有问题,连接不上(同上),第二个是有可能my.cnf有问题,配置文件怎么写就不说了,网上太多了,最后一个是授权的问题,replication slave和file权限是必须的。

一旦Slave_IO_Running为no了先看err日志,看看报什么错,很可能是网络,也有可能是包太大收不了,这个时候主备上改max_allowed_packet这个参数。


如果是slave_sql_running no了,那么也有两种可能,

1.程序可能在slave上进行了写操作

2.也可能是slave机器重启后,事务回滚造成的,这也是mysql的一种自我保护的措施,像关键时候只读一样。

一般是事务回滚造成的:
解决办法一:
mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;


解决办法二、

首先停掉Slave服务:slave stop
到主服务器上查看主机状态:
记录File和Position对应的值

进入master

mysql> show master status;
   +------------------+----------+--------------+------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +------------------+----------+--------------+------------------+
   | mysql-bin.000001 |     3362 |              |                  |
   +------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

然后到slave服务器上执行手动同步:


mysql> stop slave;

 mysql>change master to master_host='192.168.1.201',master_user='mysync',master_password='q123456',
         master_log_file='mysql-bin.000001',master_log_pos=3362;

mysql> start slave;

即可!