一、介绍
- 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
-
检查连接信息:
确保从服务器上的master_host
、master_user
、master_password
、master_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
- 主服务器配置:
- 确保主服务器的
bind-address
配置正确,以便它可以接受来自从服务器的连接。 - 如果主服务器配置了只允许特定IP地址的连接,请确保从服务器的IP地址被包括在内。
- 检查主服务器上的
max_connections
设置,确保没有达到连接数上限。
- 确保主服务器的
- 复制用户权限:
- 确保在主服务器上有一个具有适当复制权限的用户账户,该账户用于从服务器的连接。
- 检查用户账户是否被授予了
REPLICATION SLAVE
权限,并且密码正确无误。 - 确保用户账户没有过期,也没有被锁定。
- 复制配置:
- 在从服务器上,检查
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