数据库无法连接情况排查
文章目录
- 环境
- 症状
- 问题原因
- 解决方案
环境
系统平台:N/A
版本:9.0,6.0,4.5
症状
本文档用于提供HGDB数据库的常见无法连接问题的基本排查思路,建议按顺序排查; 若以上步骤未能排查出连接问题,建议联系瀚高厂家处理。
问题原因
解决方案
一. 确认数据库服务是否正常
登录到数据库服务器: linux :
ps-ef|grep postgres确认至少包含如下postgres关键服务
.../<安装路径下>/bin/postgres ...postgres: checkpointer ...postgres: background writer ...postgres: walwriter ...postgres: autovacuum launcher ...postgres: stats collectorwindows : 使用任务管理器,检查postgres服务是否正常运行
二. 确认服务器本地能否正常接受连接
使用如下命令,尝试服务器本地连接数据库,假如可以进入psql,说明数据库服务运行正常。
本地回环地址测试:
psql-h127.0.0.1-U 用户名-d 数据库名-p 端口网卡地址测试:
psql-h 数据库服务器IP地址-U 用户名-d 数据库名-p 端口假如127.0.0.1可以正常连接数据库,但是对外IP地址无法连接,说明:
(1)服务器防火墙可能未开放对外访问数据库端口,联系系统管理员放开防火墙策略,
(2)检查数据库listen_addresses,检查监听是否放开为0.0.0.0或*
(3)检查selinux是否关闭,getenforce获取selinux状态,建议关闭selinux
三. 排查网络问题
工具提示IP地址不可达、端口拒绝访问、连接超时/connect timed out等,优先排查网络问题,使用ping和telnet等命令结合,测试网络情况
ping IP地址 telnet IP地址 端口例如:
ping192.168.100.xx telnet192.168.100.xx5866解决策略:
(1)确认数据库服务器IP和端口网络策略放通;
(2)假如IP可达,端口不可达,且数据库服务运行正常,则检查服务器防火墙、网络防火墙等安全策略启用情况;
四 连接信息填写错误
1 提示用户名或角色不存在
FATAL:role "用户名" does not exist2 提示密码错误
FATAL: password authentication failed for user "用户名"3 提示数据库不存在
FATAL: database "数据库名" does not exist解决方案:检查连接工具中配置的用户名、密码、数据库名等连接信息是否正常
五 pg_hba中的相关报错
- pg_hba策略问题:
(1)未配置对应访问策略
FATAL: no pg_hba.conf entry for host "客户端IP",user "用户名",database "数据库名",SSL ...(2)pg_hba中的reject策略拒绝了本次连接
FATAL:pg_hba.conf rejects connection for host "192.168.100.xx",user "xxx",database "xxx",...解决方案: 参考文档017178604 《连接数据库失败提示hba.conf不符合的处理方法》
添加和调整pg_hba.conf访问策略
- 提示pg_hba认证方式不匹配
pg_hba ... the authentication type 13 is not supported解决方案:数据库开启了sm3国密连接加密认证,需要替换客户端瀚高数据库驱动,或关闭sm3用户认证加密
六 会导致无法连接数据库的一些其他场景
- 数据库提示startup 或正在启动中
说明数据库刚刚启动,正在应用wal进行崩溃恢复,可以
ps -ef |grep postgres
检查startup recovering <000000开头的wal名>是否在推进
假如服务器为流复制备库,检查hot_standby参数是否开启。
- 提示超出最大连接数
FATAL: sorry, too many clients already
该错误为数据库的会话数量超出max_connections限制值
ps -ef |grep postgres|wc -l
与数据库的连接参数max_connections
假如超过最大连接数,需要择机重启数据库增加连接参数,或排查占用连接的会话。
- 超出用户/数据库连接参数限制:
FATAL: too many connections for role “角色名”
或
FATAL: too many connections for database “数据库名”
检查用户连接限制:
selectrolname,rolconnlimitfrompg_roles;检查数据库连接限制:
selectdatname,datconnlimitfrompg_database;-1表示无限制,其他整数表示实际连接数限制
使用如下命令修改连接限制: 用户:
alteruseru1withconnectionlimit连接数;数据库:
alterdatabasedb1withconnectionlimit连接数;