MySQL 连接失败是开发、部署和运维中经常遇到的问题。应用提示连接超时、账号拒绝、数据库不存在、端口不通,或者本地能连、线上不能连,都属于这一类故障。
排查 MySQL 连接失败不能只改账号密码。需要按链路检查:数据库服务是否启动、主机和端口是否可达、账号权限是否允许当前来源、配置文件是否监听正确地址、防火墙和安全组是否放行。本文整理一套完整排查流程。
先看错误信息
不同错误信息代表不同方向。比如 Access denied 多半是账号、密码或权限问题;Connection refused 多半是端口无服务监听;Connection timed out 常见于网络、防火墙或安全组阻断。
Access denied for user
Can't connect to MySQL server
Connection timed out
先记录完整错误,不要只说“连不上”。完整错误能直接缩小范围。
确认服务是否运行
在数据库服务器上,先确认 MySQL 服务是否正常运行。
systemctl status mysql
systemctl status mysqld
不同系统服务名可能不同。服务未启动时,先查看启动失败原因,而不是继续排查账号。

检查端口监听
MySQL 默认监听 3306 端口。可以用命令确认端口是否在监听。
ss -lntp | grep 3306
如果没有监听,说明 MySQL 没有启动成功,或者配置了其他端口。要查看 MySQL 配置文件中的 port。
本机连接测试
先在数据库服务器本机测试连接。
mysql -u user -p -h 127.0.0.1 -P 3306
如果本机都无法连接,优先排查服务、账号、密码和本机权限。如果本机能连,远程不能连,再看监听地址、防火墙和账号来源。
监听地址
MySQL 配置中的 bind-address 决定监听哪些地址。如果只监听 127.0.0.1,远程机器无法连接。
bind-address = 127.0.0.1
需要远程连接时,可以配置为服务器内网 IP,或根据安全策略配置为 0.0.0.0。但开放监听后必须配合防火墙和权限控制。
账号来源权限
MySQL 账号不仅有用户名,还有来源主机。user@localhost 和 user@% 是不同账号。
SELECT user, host FROM mysql.user;
如果应用从另一台服务器连接,需要确认账号允许该来源 IP 或网段连接。
授权示例
可以为指定来源创建账号并授权。生产环境不要随意给所有来源开放。
CREATE USER 'appuser'@'10.0.0.%' IDENTIFIED BY 'strong_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'appuser'@'10.0.0.%';
授权后根据 MySQL 版本情况确认权限是否生效。尽量使用最小权限,不要给应用账号 root 权限。
密码和认证插件
账号密码正确但仍连接失败时,要检查认证插件。某些旧客户端不支持新认证方式,可能需要升级客户端或调整账号认证插件。
SELECT user, host, plugin FROM mysql.user;
不要一遇到认证问题就降低安全设置。优先升级驱动或客户端。
防火墙检查
服务器防火墙可能阻止 3306 端口访问。根据系统使用 firewalld、ufw 或 iptables 检查规则。
ufw status
firewall-cmd --list-ports
只向可信来源放行数据库端口,不要把 3306 暴露给全网。
云安全组
云服务器还要检查安全组。即使系统防火墙放行,云平台安全组没放行,外部仍然无法连接。
建议只允许应用服务器内网 IP 访问数据库端口。公网开放数据库风险很高。
网络连通性
从应用服务器测试到数据库服务器的端口连通性。
nc -vz db.example.com 3306
如果端口不通,继续检查网络路由、防火墙、安全组和监听地址。如果端口通但登录失败,再回到账号权限。
数据库名错误
连接成功后仍提示数据库不存在,要检查应用配置中的数据库名是否正确。
Unknown database 'appdb'
还要确认账号是否有访问该数据库的权限。
应用配置
很多连接失败来自应用配置写错:主机名、端口、用户名、密码、数据库名、字符集、连接池参数。部署时要确认环境变量是否加载了最新值。
如果使用 Docker,还要区分容器内的 localhost 和宿主机 localhost。容器里的 localhost 指的是容器本身。
日志排查
MySQL 错误日志可以提供启动失败、权限拒绝、连接异常等信息。
tail -f /var/log/mysql/error.log
应用日志也要一起看。数据库日志和应用日志结合,才能判断失败发生在网络层、认证层还是业务配置层。
常见错误
第一种错误是远程连接时只检查密码,不看账号 host。第二种错误是 MySQL 只监听 127.0.0.1。第三种错误是安全组没放行。第四种错误是把数据库端口暴露给公网。第五种错误是 Docker 环境里误用 localhost。
排查流程
建议按这个顺序排查:读取完整错误;确认 MySQL 服务运行;检查 3306 端口监听;本机连接测试;远程端口测试;检查 bind-address;检查账号 user 和 host;检查防火墙和安全组;最后核对应用配置。
MySQL 连接失败看似复杂,但本质就是服务、网络、权限、配置四层。按层排查,比反复改密码更可靠。













暂无评论内容