linux系统中使用mysql客户端连接数据库时返回10061错误,本质是客户端无法和mysql服务建立网络连接,需要从服务状态、配置、网络、权限等多个维度逐步排查。

10061错误的核心含义
mysql的10061错误对应系统层面的“连接被拒绝”错误,说明客户端发起的连接请求没有到达mysql服务,或者mysql服务没有在对应的端口上监听。常见的报错信息类似ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)。
常见原因及排查解决方法
1. mysql服务未启动
这是最常见的原因,先检查mysql服务的运行状态:
# 查看mysql服务状态,不同linux发行版命令略有差异 systemctl status mysqld # 如果是ubuntu等使用mysql名称的服务 systemctl status mysql
如果输出显示服务是inactive状态,执行启动命令:
# 启动mysql服务 systemctl start mysqld # 设置开机自启避免后续再出现该问题 systemctl enable mysqld
2. mysql监听端口或地址配置错误
默认情况下mysql监听3306端口,且监听地址为127.0.0.1或者0.0.0.0,如果配置被修改可能导致连接失败。先查看mysql的实际监听情况:
# 查看3306端口的监听状态 netstat -tlnp | grep 3306 # 如果没有netstat可以用ss命令 ss -tlnp | grep 3306
如果看不到3306端口的监听,或者监听地址不是你连接时使用的地址,需要修改mysql的配置文件/etc/my.cnf或者/etc/mysql/my.cnf:
[mysqld] # 监听所有地址,允许远程连接 bind-address = 0.0.0.0 # 确认端口是3306,没有被人修改 port = 3306
修改完成后重启mysql服务使配置生效:
systemctl restart mysqld
3. 防火墙拦截了连接请求
如果mysql服务正常运行且端口监听正常,但是远程连接或者本地连接还是报10061,可能是防火墙拦截了3306端口。排查防火墙规则:
# 查看firewalld防火墙规则 firewall-cmd --list-all # 查看iptables规则 iptables -L -n
如果3306端口没有在允许列表中,添加放行规则:
# firewalld放行3306端口 firewall-cmd --add-port=3306/tcp --permanent firewall-cmd --reload # iptables放行3306端口 iptables -A INPUT -p tcp --dport 3306 -j ACCEPT # 保存iptables规则,不同系统保存命令不同 service iptables save
4. 连接参数填写错误
确认连接时使用的主机地址、端口、用户名是否正确,比如连接本地mysql时如果填写了远程主机地址,或者端口写成了其他数值,也会触发10061错误。正确的本地连接命令示例:
# 连接本地mysql,默认端口3306 mysql -u root -p # 指定端口连接 mysql -u root -p -P 3306 -h 127.0.0.1
排查流程总结
可以按照以下顺序逐步排查:
- 第一步:检查mysql服务是否正常运行
- 第二步:检查mysql是否监听在正确的端口和地址上
- 第三步:检查防火墙是否放行了mysql端口
- 第四步:检查连接命令的参数是否正确
按照上述步骤基本可以解决绝大多数linux下mysql 10061错误的问题,如果还是无法解决,可以查看mysql的错误日志/var/log/mysqld.log,里面会有更详细的报错信息帮助定位问题。