更新时间:2024-06-20 GMT+08:00
分享

建立数据库连接失败

Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

问题分析:客户端与服务端网络不通、端口错误或待连接CN异常。

处理方法
  • 客户端ping服务端IP,查看网络是否畅通,网络不通则需解决网络问题。
  • 检查URL中连接CN的端口是否正确,若端口不正确则需修改为正确的端口(默认为8000)。

FATAL: Invalid username/password,login denied.

问题分析:用户名或密码配置错误。

处理方法:检查用户名密码是否为数据库用户名和密码,将其修改为正确的数据库用户名和密码。

No suitable driver found for XXXX

问题分析:通过JDBC建连时URL格式错误。

处理方法:将URL格式修改为正确的格式。
  • gsjdbc4.jar对应URL格式为: jdbc:postgresql://host:port/database
    • 在使用pom依赖时对应8.1.x版本
  • gsjdbc200.jar对应URL格式为:jdbc:gaussdb://host:port/database
    • 在使用pom依赖时对应8.1.x-200版本

conflict

问题分析:JDBC jar包和应用程序冲突。例如JDBC和应用程序拥有相同路径相同名称的类导致:

  • gsjdbc4.jar和开源postgresql.jar冲突,两者具有完全相同的类名。
  • gsjdbc4.jar由于IAM特性引入了一些其他工具,例如fastjson,和应用程序中的fastjson冲突。

处理方法

  • 针对和开源postgresql.jar的冲突,DWS提供了gsjdbc200.jar,使用和开源驱动不同的url格式和驱动路径,驱动名由org.postgresql.Driver修改为com.huawei.gauss200.jdbc.Driver,URL格式由org:postgresql://host:port/database改为jdbc:gaussdb://host:port/database,彻底解决了和开源jar包的冲突。
  • 针对JDBC引入的jar和应用程序中引入jar的冲突,可以通过maven的shade修改了jar中类的路径,解决此类冲突。
  • 排查使用的JDBC驱动是gsjdbc4.jar还是gsjdbc200.jar,如果是gsjdbc4.jar应该替换为gsjdbc200.jar,尝试建立连接。

    对于pom依赖,将8.1.x版本替换为8.1.x-200版本。

org.postgresql.util.PSQLException: FATAL: terminating connection due to administrator command Session unused timeout

问题分析:会话超时导致连接断开。

处理方法:排查CN和客户端JDBC上的超时配置,按业务实际情况调长超时时间或关闭超时设置。

  1. 查看报错的CN日志,如果有session unused timeout这样的日志,说明是会话超时导致的。

    解决办法:

    1. 登录控制台单击指定集群名称。
    2. 在左侧导航栏选择“参数修改”,搜索参数“session_timeout”查看超时时间参数。
    3. 将session_timeout的CN、DN参数值设置为0,详情可参见修改数据库参数

Connection refused: connect.

问题分析:第三方工具的默认驱动不兼容。

处理方法:用户可更换JDBC驱动包,查看是否正常连接。

Connections could not be acquired from the underlying database!

问题分析:按照新建连接排查项进行排查:

  • 驱动配置是否有误。
  • 数据库连接地址是否有误。
  • 密码或账号是否有误。
  • 数据库未启动或无权访问。
  • 项目未引入对应的驱动jar包。

处理方法

  • 排查驱动配置,将其修改为正确的驱动配置。
    • gsjdbc4.jar driver=org.postgresql.Driver
    • gsjdbc200.jar driver=com.huawei.gauss200.jdbc.Driver
  • 排查数据库连接地址,将其修改为正确的数据库连接地址。
    • gsjdbc4.jar对应jdbc:postgresql://host:port/database
    • gsjdbc200.jar对应jdbc:gaussdb://host:port/database
  • 排查用户名密码是否为数据库用户名或密码,将其修改为正确的数据库用户名或密码。
  • 排查数据库是否启动或有权限访问。
  • 检查使用的JDBC驱动是gsjdbc4.jar还是gsjdbc200.jar,请使用正确JDBC驱动jar包。

    • gsjdbc4.jar:与PostgreSQL保持兼容,其中类名、类结构与PostgreSQL驱动完全一致,曾经运行于PostgreSQL的应用程序可以直接移植到当前系统中使用。
    • gsjdbc200.jar:如果同一JVM进程内需要同时访问PostgreSQL及GaussDB(DWS) 请使用该驱动包。该包主类名为“com.huawei.gauss200.jdbc.Driver”(即将“org.postgresql”替换为“com.huawei.gauss200.jdbc”),数据库连接的URL前缀为“jdbc:gaussdb”,其余与gsjdbc4.jar相同。

JDBC DEV环境没问题,测试环境连接出错报空指针或URI报错uri is not hierarchical

问题分析:某些虚拟环境不支持获取扩展参数,需关闭。

处理方法:在连接时可设置连接参数“connectionExtraInfo=false”,详情可参见使用JDBC连接数据库

1
jdbc:postgresql://host:port/database?connectionExtraInfo=false

使用开源JDBC SSL方式连接DWS报错

问题分析:使用开源JDBC会进行SSL全校验,校验url是否完全匹配。

处理方法:在开源连接时可设置连接参数“sslmode=require”。

1
jdbc:postgresql://host:port/database?sslmode=require

在CopyManager场景使用连接池获取连接,Connection无法转换为BaseConnection

问题分析:BaseConnection为非公开类,需要对连接池对象解封装然后获取原始PGConnection。

处理方法: 对当前对象解包装,返回原始对象以允许访问未公开方法。

1
2
3
4
5
//解封装
PGConnection unwrap = connection.unwrap(PGConnection.class);
//转换BaseConnection
BaseConnection baseConnection = (BaseConnection)unwrap;
CopyManager copyManager = new CopyManager(baseConnection);

相关文档