数据库连接失败配置教程:从服务状态到连接池的5个排查点
数据库连接失败时最怕乱改配置。本篇数据库连接失败配置教程按日常排查顺序,整理了从服务状态、网络防火墙、账号权限,到应用连接串和连接池配置的5个检查点。跟着逐层定位,基本能解决大部分连接报错。
1. 确认服务状态与绑定地址
遇到连接失败,先确认数据库进程是否正常运行。使用 systemctl status mysqld 查看,如果服务挂掉,优先检查错误日志,常见原因包括配置文件错误、数据目录权限异常或磁盘空间不足。服务启动后,用 ss -tlnp | grep mysql 确认监听地址。若远程连不上,通常是 bind-address 默认绑定了 127.0.0.1,需修改为 0.0.0.0 或具体内网IP,并重启服务生效。
2. 网络连通性与防火墙配置
进程正常但连不上时,在客户端使用 telnet IP 3306 测试端口。不通则逐层排查:云主机安全组是否放行3306端口?系统 firewalld 或 iptables 是否拦截?若中间有SLB或代理,需检查健康检查配置。内网环境注意VPC路由表和子网ACL。若应用配置使用域名,先用 dig 确认解析正确,避免DNS缓存未刷新导致白忙。
3. 账号权限与认证插件排查
网络和端口正常却报 Access denied,需看具体报错。若提示 Host not allowed,说明未对该客户端IP授权,需登录数据库检查 mysql.user 的 host 字段,执行 GRANT 授权并 FLUSH PRIVILEGES。此外,MySQL 8.0 默认使用 caching_sha2_password,老旧客户端驱动可能不兼容,需升级驱动或将认证插件改回 mysql_native_password。
4. 连接串配置核对
应用配置中的连接字符串是报错重灾区。需仔细核对JDBC的URL格式、PHP mysqli的参数顺序、Python的host与port是否写反。云数据库若强制开启SSL,证书路径配置错误会直接拒绝连接。另外,connectTimeout 不宜设置过短,遇到网络抖动时几秒就超时易引发故障,生产环境建议配置合理的超时与重试策略。
5. 连接池打满与空闲断开处理
若报错 Too many connections,登录数据库查看 Threads_connected 是否达到 max_connections 上限。临时可 SET GLOBAL 调大,长远需通过 show processlist 排查僵尸连接。应用侧连接池大小不应顶满数据库上限,需留有余量。另一个隐蔽问题是数据库的 wait_timeout 会踢掉空闲连接,若连接池无保活机制,应用拿到死连接即报错。建议在连接池配置 keepalive 或 idle validation,定期发送轻量SQL保活。