配置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;
即可!