cxg518 发表于 2018-10-22 11:34:40

Slave_IO_Running和slave_sql_running异常处理

  配置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服务器上Telnetmaster_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;
  即可!

页: [1]
查看完整版本: Slave_IO_Running和slave_sql_running异常处理