GaussDB JDBC问题处理

举报
GaussDB 数据库 发表于 2025/12/09 10:42:05 2025/12/09
【摘要】 故障现象JDBC连接数据库或者执行业务语句报错,业务成功率下降或者业务持续失败。故障原因可能原因有以下:应用程序到数据库之间网络通信问题。JDBC配置问题。业务逻辑问题。数据库问题。处理方法Read timed out问题步骤 1     查看应用报错日志。如报错为:An I/O error occured while sending to the backend.detail:Read t...
  • 故障现象

JDBC连接数据库或者执行业务语句报错,业务成功率下降或者业务持续失败。

  • 故障原因

可能原因有以下:

  1. 应用程序到数据库之间网络通信问题。
  2. JDBC配置问题。
  3. 业务逻辑问题。
  4. 数据库问题。
  • 处理方法

Read timed out问题

步骤 1     查看应用报错日志。

如报错为:An I/O error occured while sending to the backend.detail:Read timed out,如下图,则原因是连接超时。

311.png

步骤 2     查看JDBC url配置,查看url中是否配置socketTimeout 或者connectTimeout参数。

当设置了connectTimeout时,JDBC创建tcp套接字进行建连时,等待的时间超过了connectTimeout,会抛出异常,这种情况,一般是网络问题或者内核通讯问题导致,需排查故障时的网络状况以及线程池使用情况。

实时查询线程池使用情况:

select node_name,session_info from dbe_perf.global_threadpool_status order by 1;

说明:

历史线程池使用情况,可通过DBS运维管理平台 > 实例监控查看。

当设置了socketTimeout时,JDBC读取报文,调用SocketInputStream.read()函数,该函数会调用函数socketRead阻塞等待内核返还报文,当阻塞时间超过socketTimeout时,会抛出异常。

a.  socketTimeout值设置是否合理。

b.  排查慢SQL,参照单SQL性能慢-视图分析。

c.  排查故障时网络状况。

d.  排查有无锁等待超时等,如下图为锁等待超时。

cd $GAUSSLOG/pg_log/cn_xxxx

搜索关键词timeout

312.png

----结束

EOF Exception问题

步骤 1     查看应用报错日志。

步骤 2     如报错为:An I/O error occured while sending to the backend.detail:EOF Exception,如下图,则原因为连接被异常中断。

3122.png

步骤 3     排查应用程序到数据库网络是否有异常。

步骤 4     执行如下命令,排查数据库集群状态是否正常。

cm_ctl query -Cvd

CN或者DN组件异常,分布式集群参照CN故障处理,集中式集群参照DN故障处理。

步骤 5     如集群状态正常,则排查数据库CN组件否有重启,如有重启,则参照CN组件状态Normal-告警原因分析章节排查,集中式排查DN组件是否有重启,如有重启,参照DN组件状态Normal-告警原因分析章节排查,若未排查到原因,则联系华为技术支持。

ps ux|grep cn|grep -v grep

3151.png

ps ux|grep dn|grep -v grep

3152.png

----结束


认证配置问题

步骤 1     查看应用程序报错日志,如报错为:no pg_hba.conf entry for host,则表示客户端认证配置错误。

3153.png

步骤 2     连接CN节点,进入到CN目录,集中式场景需要连接DN节点,且进入到DN目录。

步骤 3     查看pg_hba.conf文件配置,如文件中的内容如下。

host posgres jim 192.168.0.1/32 sha256

host表示表示这条记录既接受一个普通的TCP/IP套接字连接,也接受一个经过SSL加密的TCP/IP套接字连接。

posgres表示允许客户端连接到posgres库,此处为database名称,如允许连接任意库,则此处为all

jim表示允许客户端连接jim用户,此处为user名称,如允许所有用户连接,此处为all

192.168.0.1/32表示允许IP地址为192.168.0.1/32的客户端连接数据库,此处为IP地址,如允许所有的IP地址连接,此处需设置为0.0.0.0/0

sha256表示认证方式,一般都用默认值sha256

步骤 4     如未配置客户端认证,使用以下命令进行配置。

1. 分布式:gs_guc reload -Z coordinator -N all -I all -h "host all all 0.0.0.0/0 sha256"

2. 集中式:gs_guc reload -Z datanode -N all -I all -h "host all all 0.0.0.0/0 sha256"

说明:

HCS场景,执行gs_guc命令需要进入沙箱。

步骤 5     如应用报错为:Invalid or unsupported by client SCRAM mechanisms,则表示连接数据库认证方式不支持,可能是使用PostgreSQL原生的驱动。

3155.png

步骤 6     确认jdbc驱动是否为GaussDB版本配套的驱动。

官网获取的jdbc驱动解压之后包括:gsjdbc4.jargsjdbc200.jaropengaussjdbc.jar,各驱动说明如下:

gsjdbc4.jar:驱动类名和加载路径与PostgreSQL相同,方便运行于PostgreSQL上的业务进行迁移,但接口的支持情况并不与PostgreSQL完全一致,部分不支持接口需要业务侧进行调整。

gsjdbc200.jar:驱动类名和加载路径与Gauss200相同,方便运行于Gauss200上的业务进行迁移,但接口支持情况并不与Gauss200完全相同,部分不支持接口需要业务侧调整。

opengaussjdbc.jar:主类名为“com.huawei.opengauss.jdbc.Driver”,数据库连接的url前缀为“jdbc:opengauss”,推荐使用此驱动包。如果遇到同一JVM进程内需要同时访问PostgreSQLGaussDB Kernel的场景,请使用此驱动包。

说明:

当驱动路径下同时存在PostgreSQLGaussDB官方驱动时,也可能导致此报错,需删除PostgreSQL驱动。

如确认驱动正确,请联系华为技术支持。

----结束

用户名或者密码错误问题。

步骤 1     查看应用程序报错日志,如报错为:Invalid username/password,login denied,则表示为用户名或者密码配置错误。

3156.png

步骤 2     可使用管理员用户连接数据库,重置用户密码,或者修改程序中的密码为正确密码。

alter user usename password "********";

步骤 3     如重试多次,账户被锁定,可使用以下SQL语句解锁。

alter user username account unlock;

步骤 4     如应用程序报错日志为:The account has been locked,则表示为用户被锁定。

3157.png

步骤 5     可使用以下SQL语句解锁。

alter user username account unlock;

----结束

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。