Slave_IO_Running: No /Connecting,或Slave_SQL_Running: No总结

一、介绍

  • Slave_IO_Running: No

        在MySQL的主从复制架构中,Slave_IO_Running: No 表示从服务器的I/O线程没有运行。I/O          线程负责从主服务器读取二进制日志(binlog)事件,并将其写入到从服务器的中继日志              (relay log)中。如果I/O线程没有运行,那么从服务器就无法接收到主服务器的更新,导致数          据复制过程中断。

  • Slave_IO_Running: Connecting:

      表示从服务器的I/O线程正在尝试连接到主服务器,但尚未成功建立连接。

  • Slave_SQL_Running: No

      这个状态表示从服务器上的SQL线程没有运行。SQL线程负责读取中继日志(Relay Log)中          的事件,并在从服务器上执行这些事件,以实现数据的复制。如果SQL线程停止运行,那么从        服务器将无法同步主服务器上的数据变更。

二、注意检查错误日志是一个很好的习惯,如果你不知道错误日志在哪里就可以进入数据库使用

show variables like '%log_error%';可以查看错误日志的位置,然后根据错误日志的位置查看具体的错误信息

三、Slave_IO_Running: No

  1. 检查连接信息
    确保从服务器上的master_hostmaster_usermaster_passwordmaster_port等配置正确无误,并且主服务器允许从服务器通过这些凭据进行连接。

      (注意:密码是否正确,端口一般是3306,除非你特意设置,还有偏移量是否与主库一致,             文件名mysql_bin.000002中间的横杠是否是mysql-bin.000002)

   2.检查主服务器的binlog
     确认主服务器的二进制日志是否开启,并且server-id配置正确。如果二进制日志没有开启,         或者server-id与从服务器冲突,也会导致复制失败。

  (注意server-id不能一样)

  3.检查防火墙和安全组设置
    确保没有防火墙或安全组规则阻止从服务器访问主服务器的MySQL端口

 (systemctl stop status使用此命令可以看防火墙是否关闭,我一般是使用systemctl stop firewalld     关闭防火墙简单粗暴,你也可以设置允许你的mysql端口通过)

 4.查看权限问题:(show grants for 用户名)
   确保主服务器上的MySQL用户具有足够的权限来允许从服务器进行复制。通常,这个用户需要   REPLICATION SLAVE权限。

四、Slave_IO_Running: Connecting

  1. 主服务器配置
    • 确保主服务器的bind-address配置正确,以便它可以接受来自从服务器的连接。
    • 如果主服务器配置了只允许特定IP地址的连接,请确保从服务器的IP地址被包括在内。
    • 检查主服务器上的max_connections设置,确保没有达到连接数上限。
  2. 复制用户权限
    • 确保在主服务器上有一个具有适当复制权限的用户账户,该账户用于从服务器的连接。
    • 检查用户账户是否被授予了REPLICATION SLAVE权限,并且密码正确无误。
    • 确保用户账户没有过期,也没有被锁定。
  3. 复制配置
    • 在从服务器上,检查CHANGE MASTER TO语句中指定的主服务器地址、端口、用户和密码是否正确。
    • 如果主服务器的IP地址或端口号发生变化,需要更新从服务器上的复制配置

五、Slave_SQL_Running: No

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

解决办法:

     reset master;

     stop slave;

     reset slave;

     change master to 
     > master_host='master_ip',
     > master_user='user', 
     > master_password='pwd', 
     > master_port=3306, 
     > master_log_file='文件的名字', 
     > master_log_pos=文件的位置 ;(查看文件名的方法是:在主库上使用:show master                    status;)

    start slave;

    show slave status\G;

2.可能是slave机器重启后,事务回滚造成

解决方法:stop slave;

                 set global sql_slave_skip_counter=1;

                 start slave

你可能感兴趣的:(sql,数据库)