应用连接数据库失败#

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

先区分:连不上端口、加密/认证失败、连接池等待、查询执行慢。检查必须从故障应用实际所在网络发起;笔记本能连不能证明 Pod 能连。

1. 固定测试位置与目标#

下列命令在故障应用容器已有工具时执行,或在经批准的诊断环境执行;后者须核对命名空间、网络策略、服务身份与流量代理是否一致。不要临时给应用安装软件,也不要向诊断容器复制生产密码。

示例为 PostgreSQL,所需工具:getent、ip、nc、PostgreSQL 客户端。Linux 的 nc 实现可能不同,先用 nc -h 核对选项。

export DB_HOST='db.internal.example.com'
export DB_PORT='5432'
getent ahostsv4 "$DB_HOST"
export DB_IP='REPLACE_RESOLVED_IPV4'
ip route get "$DB_IP"
nc -vz -w 3 "$DB_HOST" "$DB_PORT"

数据库仅使用 IPv6 时改用 getent ahosts 和 ip -6 route get。ip route get 只显示当前网络命名空间的路由,不能证明云路由、回程或防火墙允许。

结果 判断 下一步
无法解析 / 地址错误 私有区域、解析器、端点或缓存问题 GCP 私网、CoreDNS
no route / 走错接口 本机路由或策略路由问题 Linux 路由排障
端口超时 丢包、过滤、回程或服务无响应 查两端网络规则、流日志和数据库状态,不能仅凭超时确定是哪层
Connection refused 当前目标主动拒绝连接 查实际端点、监听端口、代理状态与故障切换
端口可连接 仅证明传输层连接建立 继续验证数据库协议、TLS 与认证

AWS 需要核对 VPC(Virtual Private Cloud,虚拟私有云)路由、SG(Security Group,安全组)和 NACL(Network Access Control List,网络访问控制列表):SG 有状态,NACL 无状态,需放通对应回包。隔离数据子网与应用子网同 VPC 通信不需要 NAT(Network Address Translation,网络地址转换)网关,详见 三层子网。跨 VPC 再检查对等连接、地址重叠与双向路由。

2. 区分数据库接入与实际认证#

pg_isready -h "$DB_HOST" -p "$DB_PORT" -t 3
DB_READY_RC=$?
printf 'pg_isready_exit=%s\n' "$DB_READY_RC"

退出码:0 接受连接、1 拒绝连接、2 无响应、3 参数等原因未发起检查;0 不证明业务账号可以登录或访问表。见 PostgreSQL 官方说明。

使用已批准的只读诊断账号及安全注入的凭证文件验证;实际文件不得提交仓库。下面要求平台已准备好权限为 0600 的 PGPASSFILE,不要在命令行填写密码。

export PGUSER='REPLACE_DIAGNOSTIC_USER'
export PGDATABASE='REPLACE_DATABASE'
export PGSSLMODE='verify-full'
export PGSSLROOTCERT='/run/secrets/db-ca.pem'
export PGPASSFILE='/run/secrets/db.pgpass'
PGHOST="$DB_HOST" PGPORT="$DB_PORT" PGCONNECT_TIMEOUT=3 PGOPTIONS='-c statement_timeout=5000 -c default_transaction_read_only=on' psql -X -w -v ON_ERROR_STOP=1 -c 'SELECT current_database(), current_user, 1;'

TLS(Transport Layer Security,传输层安全)校验失败时查主机名、证书链、有效期和客户端时间,不降级为不校验证书。账号认证失败查凭证版本、轮换和授权;若应用经数据库代理连接,应按实际代理与身份方式测试,不能把直连测试结果直接套用。

MySQL 使用既有安全登录配置执行:

mysql --login-path=diagnostic --host="$DB_HOST" --port=3306 --connect-timeout=3 --ssl-mode=VERIFY_IDENTITY --ssl-ca=/run/secrets/db-ca.pem --execute='SELECT CURRENT_USER(), 1;'

diagnostic 须事先由平台安全配置;不要在工单中展示其内容。查询成功仅验证该账号,业务账号还需通过应用的受控请求验证授权。

3. 连接成功但应用仍超时#

应用证据 优先检查 处理方向
等待连接池超时 活跃/空闲/等待连接数、持有时间 连接泄漏、长事务、请求并发;不要直接翻倍池大小
新增副本后连接耗尽 各副本池上限总和、数据库连接上限 加上 worker、迁移任务和管理连接预算
查询执行慢 / 锁等待 慢查询、执行计划、锁与事务时间 定位阻塞源,先评估业务影响再终止会话
轮换或切换后失败 凭证刷新、旧连接、解析缓存 验证刷新和重连机制,避免全实例同时重连

继续:PostgreSQL 生产实践、MySQL 生产实践、Cloud SQL。

4. 恢复验收#

从原应用路径验证读取及经批准的业务写入,确认事务结果、连接池等待和数据库连接数恢复。销毁临时诊断环境及凭证文件;不要把“端口通了”作为事故关闭标准。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭