关于MySQL主从里遇到Slave_SQL_Running:no/Slave_io_Running:no解决

准备工作

主从机里从/usr/share/mysql/拷贝其中的my-huge.cnf 到 /etc/ 并命名为my.cnf。配好主从配置最重要的一点配上errorlog输出位置。
log-error=/var/log/xxx.log (xxx是你自定义名字)
在这里插入图片描述
从机mysql中root账户下运行show slave status\G
运行完出错
在这里插入图片描述
注意不管怎么错,errorlog都会记录。

关键的两个进程简单介绍

  • Slave_SQL_Running
    一般负责从机执行中继binlog的进程
  • Slave_IO_Running
    一般负责从机与主机通讯进程

Slave_SQL_Running:no的一般问题

在这里插入图片描述

造成原因

  1. 我是第一次搭同步成功以后对主机行进添加新数据库造成了SQL进程no,从上图最后不难看出从机找不到有新的数据库所以要解决它,必须先把主机上的新数据库的数据(存储过程可以忽略)导入到从机上。我的解决办法只适用于搭建初期,不适合生产时期,另外附上别人的解决办法链接和我自己的解决办法链接,我的解决办法单独写一个专题。
  1. slave服务没有在从机启动,或者从机的slave进程重启造成事物回滚。后者概率极大。
    这个时候想恢复的话,只要停掉slave,set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;再开一下slave就可以了,这个全局变量赋值为N的意思是:
This statement skips the next N events from the master. 
This is useful for recovering from 
replication stops caused by a statement.

This statement is valid only when 
the slave thread is not running. Otherwise, 
it produces an error.
  • 解决方案
stop slave;                                                      
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
START SLAVE;             
start slave;                                                     
show slave status\G

参考里面SQL_SLAVE_SKIP_COUNTER

Slave_io_Running:no的一般问题![在这里插入图片描述]

在这里插入图片描述

造成原因

  1. 网络不通,可以利用ping工具查看

  2. slave配置的中继binlog文件名和pos和master里的binlog不匹配

  • 解决方案
slave stop;                 
CHANGE MASTER 
TO 
MASTER_LOG_FILE='主机的binlog文件名', 
MASTER_LOG_POS=master当前的pos;  
slave start;                               
show slave status\G 

我的error信息

在这里插入图片描述我的错误信息有两条

  • 一条是主机的server-id没配,然后我进去看了下主机的配置发现server-id=1没有写在
    [mysqld]

  • 然后第二条是binlog文件和从机的文件名位置信息不匹配。

解决方案
在从机root账户下登录mysql执行如下代码

stop slave;

然后切换到主机,也是root用户登录mysql执行

flush logs;
show master status\G

记录下binlog名字和位置再回到从机操作
在这里插入图片描述
切换到从机
在这里插入图片描述执行

CHANGE MASTER 
TO 
MASTER_HOST='主机IP',
MASTER_USER='xxx',
MASTER_PASSWORD='1xxx',
MASTER_LOG_FILE='File名字',
MASTER_LOG_POS=Position数字;
slave start;
show slave status\G

在这里插入图片描述

总结

xxx.cnf配置写的位置很重要*

  • mysql版本一致且后台以服务运行
  • 确保主机和从机都开启了二进制日志
  • 主从都配置在[mysqld]结点下,都是小写

mysql中的cnf配置文件,复制一份到etc下面改名my.cnf
下面为它的结构

[client]

[mysqld]

#主服务器的id
server-id=1
#从服务器id除了1以外保证不与其他从服务器重复即可 ---唯一标示!
#server-id=2
#启用二进制日志
log-bin=mysql-bin
#设置不复制的数据库(选配)
binlog-ignore-db=mysql
#设置要复制的数据库(选配)
binlog-do-db=需要复制的主数据库名字(设置一个之前没有的数据库)
#设置logbin的格式
binlog_format=mixed
#设置一个error日志路径
log-error=/var/log/error.log

[mysql]

  • 一般错误都是围绕主机binlog文件名字和位置与从机设置的Master-logfile&log-pos不匹配造成的,在主机里重启mysql多flush logs几次就行了。
  • 最重要的是配置好主从同步以后注意新添加database可能会出现同步失败。最好参照生产环境下的同步移植数据库操作。
  • 多看错误日志帮助你快速解决问题,看不懂的把问题黏贴出来,外事不决问google,内事不决问baidu,就酱,bye~
发布了37 篇原创文章 · 获赞 17 · 访问量 1848

猜你喜欢

转载自blog.csdn.net/qq_37714755/article/details/104303396
今日推荐