数据库连接失败?一步步教你排查并修复
问题表现运行程序或访问网站时,页面长时间加载后提示“无法连接到数据库”“Connection refused”或“Can't connect to MySQL server”等错误,可能导致业务中断或数据无法读取。
可能原因
[*]数据库服务未启动或意外崩溃
[*]连接配置信息(地址、端口、用户名、密码)有误
[*]防火墙或**组阻止了数据库端口(如3306、5432)
[*]数据库连接数达到上限,拒绝新连接
[*]网络不通(服务器间路由、DNS解析问题)
对应排查步骤
[*]
检查数据库服务状态
[*]Linux系统:systemctl status mysql 或 service mysqld status
[*]Windows系统:打开“服务”窗口,查看MySQL或PostgreSQL是否在运行。
如果未运行,尝试启动:systemctl start mysql
[*]
验证连接配置
[*]打开程序配置文件(如 .env、application.properties),核对数据库地址(建议先用IP代替域名)、端口(默认MySQL 3306、PostgreSQL 5432)、用户名和密码。
[*]在数据库所在服务器上本地登录测试:mysql -u root -p,确认密码正确。
[*]
检查防火墙/**组
[*]Linux:firewall-cmd --list-all 或 iptables -L -n,查看数据库端口是否开放。
[*]云服务器:登录控制台,检查**组入站规则,确保允许来自应用服务器的IP访问端口。
[*]临时关闭防火墙测试(不推荐生产环境):systemctl s** firewalld
[*]
查看数据库连接数
[*]进入数据库执行:SHOW VARIABLES LIKE 'max_connections'; 查看上限。
[*]查看当前连接数:SHOW PROCESSLIST; 或 SELECT count(*) FROM information_schema.processlist;
如果接近上限,可临时调大:SET GLOBAL max_connections = 500; 或修改配置文件重启生效
[*]
网络连通性测试
[*]从应用服务器执行:ping 数据库IP(确认基本网络通)
[*]测试端口:telnet 数据库IP 3306(若不支持telnet,用 nc -zv 数据库IP 3306)
[*]若不通,检查路由器、VPN或云服务商的内网互通配置。
最终解决方案
[*]数据库未启动 → 启动服务,并设置开机自启(systemctl enable mysql)。
[*]配置错误 → 修改配置文件,注意密码中特殊字符需转义或使用URL编码。
[*]防火墙阻止 → 添加规则:firewall-cmd --permanent --add-port=3306/tcp 并重载。
[*]连接数满 → 优化程序连接池(限制**连接数、及时释放)、或升级数据库配置。
[*]网络问题 → 确保应用与数据库在同一内网段,或使用云服务商的互联功能。
如果以上步骤仍未解决,请检查数据库日志(如 /var/log/mysql/error.log)寻找更详细错误,或咨询DBA/云服务商技术支持。
页:
[1]