mysql Slave_IO_Running:NO 或者connecting(爬坑录)

本文详细介绍了如何配置MySQL数据库的主从读写分离,包括主服务器与从服务器的配置步骤、账户授权、复制功能启动及状态检查等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL数据库主从读写分离配置详解 大家去网上找的话,绝对会有一千万个版本 (一千个程序员有一千个哈姆雷特)。

最后,经本人苦苦探索,发现在一台win 7电脑上,去复制一份一模一样的mysql 目录文件在硬盘中,其实也行的通。早知道我不安装虚拟机,弄xp之类的。但这样做也是考虑到实际的情形,mysql的同步并不是很稳定,尤其mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负责自己的slave mysql进程。

先看我怎么做的:
1. 1、修改主服务器配置:

上图
这里写图片描述
#vi /etc/my.cnf
binlog-do-db=db1
binlog-do-db=db2
binlog-do-db=db3
binlog-ignore-db = mysql

log-bin=mysql-bin  #启用二进制日志

server-id=3028  #服务器唯一ID,一般取IP最后一段,但这儿挺坑 我开始设置为1 ,一直有毛病,看资料之后改成了其他较少见的数字
[client]
no-beep

# pipe
# socket=0.0
port=3306

[mysql]

default-character-set=utf8


# SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this 
# file.
#
# server_type=3
[mysqld]

# The next three options are mutually exclusive to SERVER_PORT below.
#skip-networking

# enable-named-pipe

# shared-memory

# shared-memory-base-name=MYSQL

# The Pipe the MySQL Server will use
# socket=MYSQL

# The TCP/IP Port the MySQL Server will listen on
port=3306

# Path to installation directory. All paths are usually resolved relative to this.
 basedir=D:/BaiduYunDownload/master

# Path to the database root
datadir=D:/BaiduYunDownload/master/Data
binlog-do-db=db1
binlog-do-db=db2
binlog-do-db=db3
binlog-ignore-db=mysql
log-bin=mysql-bin
log-bin-index=mysql-bin.index



# The default character set that will be used when a new schema or table is
# created and no character set is defined
character-set-server=utf8

# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB

# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

# Enable Windows Authentication
# plugin-load=authentication_windows.dll

# General and Slow logging.
log-output=FILE
general-log=0
general_log_file="HUKANG-PC.log"
slow-query-log=1
slow_query_log_file="HUKANG-PC-slow.log"
long_query_time=10

# Binary Logging.
# log-bin

# Error Logging.
log-error="HUKANG-PC.err"

# Server Id.
server-id=3028
----------- 底下的 就保持不变 --------------

# The maximum amount of concurrent sessions the MySQL server will
# allow. One of these connections will be reserved for a user with
# SUPER privileges to allow the administrator to login even if the
# connection limit has been reached.
max_connections=151

query_cache_size=0


table_open_cache=2000


tmp_table_size=35M


thread_cache_size=10

myisam_max_sort_file_size=100G


myisam_sort_buffer_size=61M

key_buffer_size=8M

read_buffer_size=64K
read_rnd_buffer_size=256K


innodb_additional_mem_pool_size=5M

innodb_flush_log_at_trx_commit=1


innodb_log_buffer_size=3M


innodb_buffer_pool_size=190M


innodb_log_file_size=48M


innodb_thread_concurrency=9


innodb_autoextend_increment=64
.....
...
..

2、重启MySQL
/etc/init.d/mysql restart

3、建立帐户并授权slave:
#/usr/local/mysql/bin/mysql -uroot -proot
mysql>GRANT FILE ON . TO ‘root’@’%’ IDENTIFIED BY ‘root’;
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . to ‘root’@’%’ identified by ‘root’;

刷新权限
mysql> FLUSH PRIVILEGES;
查看mysql现在有哪些用户
mysql>select user,host from mysql.user;

登录主服务器的mysql,查询master的状态

mysql> show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000010 | 106 | db1,db2,db3 | mysql |
+——————+———-+————–+——————+
Master 重启后会修改mysql-bin(序号加1)

4修改从服务器配置:
#vi /etc/my.cnf

replicate-do-db=db1
replicate-do-db=db2
replicate-do-db=db3
replicate-ignore-db=mysql
master-connect-retry=60

这个比较简单了。

5重启MySQL
/etc/init.d/mysql restart

6登录mysql并停止slave服务
# cd /usr/local/mysql/bin/
# ./mysql -uroot –proot
mysql>slave stop;
设置与master服务器相关的配置参数
mysql>change master to master_host=’10.1.176.158’, master_user=’backup’, master_password=’123456’,MASTER_LOG_FILE=’mysql-bin.000015’,MASTER_LOG_POS=106;

注意:Master重启后slave 要修改MASTER_LOG_FILE,106无单引号。

启动从服务器复制功能
Mysql>start slave;
7检查从服务器复制功能状态
mysql> show slave status\G
以下两个参数必须为YES:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

返回如下:
***************** 1. row *****************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.1.176.158
Master_User: backup
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000010
Read_Master_Log_Pos: 106
Relay_Log_File: bogon-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000010
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: db1,db2,db3
Replicate_Ignore_DB: mysql
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 106
Relay_Log_Space: 406
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)

这里写图片描述

反正这最后的2个yes 冒出来就OK了 ,说明你已经配好了。

<think>我们正在处理用户关于MySQL主从复制中Slave_IO_Running状态为"Connecting"的问题。根据引用内容,该问题通常与网络连接、配置错误或权限问题有关。下面将详细分析并给出解决方案。 问题分析: 当执行`SHOW SLAVE STATUS`时,如果看到`Slave_IO_Running: Connecting`,这意味着从服务器(Slave)的I/O线程正在尝试连接到主服务器(Master)但尚未成功。根据引用[3][4],可能的原因包括: 1. 网络问题:从服务器无法访问主服务器。 2. 主服务器配置错误:如bind-address绑定错误,导致主服务器没有监听正确的网络接口。 3. 主从复制用户权限问题:从服务器使用的复制用户没有足够的权限。 4. 主服务器信息配置错误:在从服务器上配置的主服务器地址、端口、用户名或密码错误。 5. 防火墙或端口阻塞:主服务器的复制端口(默认3306)被防火墙阻止。 6. 主服务器未开启二进制日志(binlog)或未正确配置server-id。 解决方案步骤: 1. 检查网络连通性: 在从服务器上使用系统命令`ping`测试主服务器的IP地址是否可达。 使用`telnet`或`nc`命令测试主服务器的MySQL端口(默认3306)是否开放。 例如: ```bash ping 192.168.0.1 # 替换为主服务器IP telnet 192.168.0.1 3306 ``` 2. 检查主服务器配置(my.cnf): 确保主服务器上的`bind-address`配置允许从服务器连接。如果主服务器有多个网络接口,确保绑定的IP是从服务器可以访问的。通常可以设置为`0.0.0.0`(监听所有接口)或主服务器的具体IP。 另外,确认以下配置: ```ini [mysqld] server-id=1 # 主从不能相同 log-bin=mysql-bin # 开启二进制日志 ``` 3. 检查复制用户权限: 在主服务器上,确保复制用户(例如'repl')具有`REPLICATION SLAVE`权限,并且允许从服务器IP连接。 例如: ```sql CREATE USER 'repl'@'从服务器IP' IDENTIFIED BY '密码'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从服务器IP'; FLUSH PRIVILEGES; ``` 4. 检查从服务器配置(my.cnf): 确保从服务器配置了唯一的`server-id`(不能与主服务器相同): ```ini [mysqld] server-id=2 ``` 5. 检查从服务器上的主服务器信息配置: 在从服务器上,执行`CHANGE MASTER TO`命令时,指定的主服务器信息是否正确。包括: - MASTER_HOST:主服务器IP - MASTER_PORT:主服务器MySQL端口(默认3306) - MASTER_USER:复制用户名 - MASTER_PASSWORD:复制用户密码 - MASTER_LOG_FILE和MASTER_LOG_POS:这两个参数必须与主服务器当前的二进制日志状态一致(通过主服务器`SHOW MASTER STATUS`获取)。 6. 检查防火墙: 确保主服务器的防火墙允许从服务器访问3306端口。例如,在Linux上: ```bash # 如果使用firewalld firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload # 如果使用iptables iptables -A INPUT -p tcp --dport 3306 -j ACCEPT service iptables save ``` 7. 重启主从服务器上的MySQL服务: 在修改配置后,重启MySQL服务使配置生效。 8. 在从服务器上重新启动复制: ```sql STOP SLAVE; -- 如果主服务器信息有变,重新执行CHANGE MASTER TO START SLAVE; SHOW SLAVE STATUS\G ``` 9. 查看错误日志: 如果问题仍然存在,查看主从服务器的MySQL错误日志(通常位于`/var/log/mysql/error.log`或`/var/log/mysqld.log`),寻找相关错误信息。 引用[5]提到,如果从服务器在Docker容器中,需要注意网络配置(例如使用宿主机网络或正确映射端口)以及容器与主服务器之间的网络连通性。 总结:Slave_IO_Running: Connecting通常是由于从服务器无法连接到主服务器导致的,按照上述步骤逐一排查,重点检查网络连接和配置信息。 如果按照上述步骤操作后仍然无法解决,请提供具体的错误日志信息以便进一步分析。 相关问题: 1. 如何解决MySQL主从复制中的Slave_SQL_Running: No错误? 2. 如何监控MySQL主从复制的延迟? 3. 在Docker中部署MySQL主从复制有哪些注意事项?</think>### MySQL 主从复制中 Slave_IO_Running: Connecting 问题分析与解决 #### 🔍 问题本质 当执行 `SHOW SLAVE STATUS` 显示 `Slave_IO_Running: Connecting` 时,表示从服务器无法连接到主服务器进行数据同步。I/O 线程持续尝试连接但未成功,通常由以下原因导致[^3][^4]: ```sql -- 典型错误状态示例 mysql> SHOW SLAVE STATUS\G Slave_IO_State: Connecting to master Slave_IO_Running: Connecting -- 问题状态 Slave_SQL_Running: Yes ``` #### 🛠️ 根本原因与解决方案 按优先级排序排查以下问题: 1. **网络连通性问题(最常见)** - ✅ 在从服务器执行: ```bash ping <主服务器IP> telnet <主服务器IP> 3306 # 测试MySQL端口 ``` - 🔧 解决: - 检查防火墙规则:`sudo ufw allow 3306` - 确保主服务器监听正确IP(修改 `my.cnf`): ```ini [mysqld] bind-address = 0.0.0.0 # 允许所有IP连接[^5] ``` 2. **主服务器配置错误** - ✅ 检查主服务器状态: ```sql SHOW MASTER STATUS; -- 确认File和Position值 ``` - 🔧 解决: - 确保主服务器开启二进制日志: ```ini [mysqld] log-bin=mysql-bin server-id=1 # 主从ID必须不同 ``` 3. **复制用户权限不足** - ✅ 在主服务器验证用户权限: ```sql SHOW GRANTS FOR 'repl'@'<从服务器IP>'; ``` - 🔧 解决(主服务器执行): ```sql CREATE USER 'repl'@'<从服务器IP>' IDENTIFIED BY '密码'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'<从服务器IP>'; FLUSH PRIVILEGES; ``` 4. **从服务器配置错误** - ✅ 检查从服务器 `my.cnf`: ```ini [mysqld] server-id=2 # 必须与主服务器不同 relay-log=relay-bin ``` - 🔧 解决: - 确保 `CHANGE MASTER` 命令参数正确: ```sql CHANGE MASTER TO MASTER_HOST='<主服务器IP>', MASTER_USER='repl', MASTER_PASSWORD='密码', MASTER_LOG_FILE='mysql-bin.000001', -- 主服务器SHOW MASTER STATUS的值 MASTER_LOG_POS=154; ``` 5. **时间不同步问题(易忽略)** - ✅ 检查主从服务器时间: ```bash date # 在两台服务器分别执行 ``` - 🔧 解决: ```bash sudo ntpdate pool.ntp.org # 同步时间 ``` #### 📊 故障排查流程 ```mermaid graph TD A[Slave_IO_Running: Connecting] --> B{网络测试} B -->|ping失败| C[检查防火墙/路由] B -->|ping成功| D{端口测试} D -->|telnet失败| E[检查MySQL监听IP] D -->|telnet成功| F{主服务器配置} F -->|log-bin未开启| G[启用二进制日志] F -->|server-id冲突| H[修改server-id] H --> I{复制用户权限} I -->|权限不足| J[重新授权] I -->|权限正常| K{从服务器配置} K -->|CHANGE MASTER错误| L[重置复制链路] ``` #### 🚀 重置复制链路(最后手段) 在从服务器执行: ```sql STOP SLAVE; RESET SLAVE ALL; -- 清除所有复制信息 -- 重新配置(使用正确的参数) CHANGE MASTER TO ... START SLAVE; SHOW SLAVE STATUS\G -- 验证状态 ``` #### 💡 预防措施 1. 主从服务器配置NTP时间同步 2. 使用专用复制用户并限制IP访问 3. 定期检查复制状态: ```sql SHOW SLAVE STATUS\G ``` 4. 监控关键指标: - `Seconds_Behind_Master` - `Last_IO_Error` --- ### 相关问题 1. **如何解决 MySQL 主从复制中的 `Slave_SQL_Running: No` 错误?** [常见于SQL线程执行失败,需跳过错误或重建复制] 2. **MySQL 8.0 主从复制与旧版本有何关键区别?** [涉及caching_sha2_password认证、GTID改进等] 3. **如何监控 MySQL 主从复制的实时延迟?** [使用`SHOW SLAVE STATUS`或Performance Schema指标] 4. **Docker 环境中部署 MySQL 主从复制的特殊注意事项?** [网络模式选择、端口映射、配置文件挂载等][^5] > 引用说明:本文解决方案参考了MySQL主从复制常见故障处理经验[^1][^3][^4],特别是网络配置和权限验证部分[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值