MySQL的10061错误指的是客户端尝试连接MySQL服务器时,由于目标服务器未监听对应端口、网络不通或者服务器未启动,导致TCP连接请求被拒绝而返回的错误,错误提示通常包含Can't connect to MySQL server on 'xxx' (10061)的内容。
10061错误的核心含义
10061是Windows系统下的WSAECONNREFUSED错误码,对应到MySQL连接场景中,说明客户端向指定IP和端口发送的连接请求没有被正确响应。MySQL默认使用3306端口提供服务,如果服务器没有在该端口正常监听,客户端就会收到10061错误。和10060连接超时错误不同,10061是明确的连接被拒绝,说明网络层面已经到达了目标机器,但是目标端口没有服务在运行。
常见触发场景
- MySQL服务未启动,服务器上没有运行mysqld进程
- MySQL配置的监听端口不是客户端连接的端口,比如服务器端口改成了3307,客户端还是用3306连接
- MySQL绑定了127.0.0.1地址,只监听本地回环接口,远程客户端无法连接
- 服务器防火墙拦截了MySQL端口的入站请求,导致连接被阻断
- 客户端填写的服务器IP地址错误,连接到了不存在或者未运行MySQL的机器
分步排查与解决方法
第一步:检查MySQL服务状态
首先确认MySQL服务是否正常运行,Windows系统可以在服务管理器中查看MySQL服务的状态,Linux系统可以使用以下命令检查进程:
# 查看MySQL进程是否存在 ps -ef | grep mysqld # 查看MySQL服务运行状态(systemd管理的系统) systemctl status mysql
如果服务没有启动,执行启动命令:
# Windows启动服务 net start mysql # Linux启动服务 systemctl start mysql
第二步:确认端口监听情况
检查MySQL是否在你认为的端口上监听,Windows可以使用netstat命令,Linux可以使用ss或者netstat命令:
# Windows查看3306端口监听情况 netstat -ano | findstr 3306 # Linux查看3306端口监听情况 ss -tlnp | grep 3306
如果没有对应的监听记录,需要检查MySQL的配置文件my.cnf(Linux)或者my.ini(Windows)中的port配置项,确认端口是否正确,同时查看bind-address配置,如果是127.0.0.1,需要改成0.0.0.0才能让远程客户端连接,修改后重启MySQL服务。
第三步:检查防火墙规则
如果服务正常运行且端口监听正确,需要检查服务器防火墙是否放开了MySQL端口的入站权限。Windows可以在高级防火墙设置中添加3306端口的入站规则,Linux如果是firewalld防火墙,可以执行以下命令开放端口:
# 开放3306端口 firewall-cmd --add-port=3306/tcp --permanent # 重新加载防火墙规则 firewall-cmd --reload
第四步:验证连接参数
确认客户端连接时使用的IP地址、端口、用户名、密码是否正确,本地连接可以尝试使用127.0.0.1作为地址,远程连接确保IP地址是MySQL服务器所在机器的正确公网或者内网地址。可以使用命令行客户端先测试连接:
# 本地连接测试 mysql -u root -p -h 127.0.0.1 -P 3306 # 远程连接测试,替换为实际IP mysql -u root -p -h 192.168.0.1 -P 3306
相关注意事项
如果是使用Docker部署的MySQL,还需要检查容器的端口映射是否正确,是否把容器的3306端口映射到了宿主机的对应端口。另外如果是云服务器,还需要检查云服务商的安全组规则,是否放开了MySQL端口的入站权限,很多时候10061错误都是安全组未配置导致的。
如果按照以上步骤排查后还是无法解决,可以查看MySQL的错误日志,日志中通常会记录服务启动失败或者连接相关的详细信息,能够帮助进一步定位问题。错误日志的路径可以在配置文件中通过log-error配置项查看。