更新时间:2024-07-01 GMT+08:00

通过gsql客户端无法连接数据库

问题现象

用户通过客户端工具gsql无法连接到数据库。

原因分析

  • 系统连接数量超过了最大连接数量,会显示如下错误信息。
    1
    2
    gsql -d human_resource -h 10.168.0.74 -U user1 -p 8000 -W password -r
    gsql: FATAL:  sorry, too many clients already
    
  • 用户不具备访问该数据库的权限,会显示如下错误信息。
    1
    2
    3
    gsql -d human_resource -h 10.168.0.74 -U user1 -p 8000 -W password -r
    gsql: FATAL:  permission denied for database "human_resource"
    DETAIL:  User does not have CONNECT privilege.
    
  • 网络连接故障。

解决办法

  • 系统连接超过最大连接数量。

    用户可在GaussDB(DWS) 控制台设置最大连接数max_connections。

    max_connections设置方法如下:

    1. 登录GaussDB(DWS) 管理控制台。
    2. 在左侧导航栏中,单击“集群管理”
    3. 在集群列表中找到所需要的集群,单击集群名称,进入集群“基本信息”页面。
    4. 单击“参数修改”页签,修改参数“max_connections”的值,然后单击“保存”
    5. “修改预览”窗口,确认修改无误后,单击“保存”

    关于查看用户会话连接数的方法如表1

    表1 查看会话连接数

    描述

    命令

    查看指定用户的会话连接数上限。

    执行如下命令查看连接到指定用户user1的会话连接数上限。其中,-1表示没有对用户user1设置连接数的限制。

    1
    2
    3
    4
    5
    SELECT ROLNAME,ROLCONNLIMIT FROM PG_ROLES WHERE ROLNAME='user1';
     rolname | rolconnlimit
    ---------+--------------
     user1   |       -1
    (1 row)
    

    查看指定用户已使用的会话连接数。

    执行如下命令查看指定用户user1已使用的会话连接数。其中,1表示user1已使用的会话连接数。

    1
    2
    3
    4
    5
    6
    SELECT COUNT(*) FROM V$SESSION WHERE USERNAME='user1';
    
     count
    -------
       1
    (1 row)
    

    查看指定数据库的会话连接数上限。

    执行如下命令查看连接到指定数据库db_demo的会话连接数上限。其中,-1表示没有对数据库db_demo设置连接数的限制。

    1
    2
    3
    4
    5
    6
    SELECT DATNAME,DATCONNLIMIT FROM PG_DATABASE WHERE DATNAME='db_demo';
    
     datname  | datconnlimit
    ----------+--------------
     db_demo  |       -1
    (1 row)
    

    查看指定数据库已使用的会话连接数。

    执行如下命令查看指定数据库db_demo上已使用的会话连接数。其中,1表示数据库db_demo上已使用的会话连接数。

    1
    2
    3
    4
    5
    SELECT COUNT(*) FROM PG_STAT_ACTIVITY WHERE DATNAME='db_demo';
     count 
    -------
         1
    (1 row)
    

    查看所有用户已使用会话连接数。

    执行如下命令查看所有用户已使用的会话连接数。

    1
    2
    3
    4
    5
    SELECT COUNT(*) FROM PG_STAT_ACTIVITY;
     count
    -------
         10
    (1 row)
    
  • 用户不具备访问该数据库的权限。
    1. 使用管理员用户dbadmin连接数据库。
      1
      gsql -d human_resource -h 10.168.0.74 -U dbadmin -p 8000 -W password -r
      
    2. 赋予user1用户访问数据库的权限。
      1
      GRANT CONNECT ON DATABASE human_resource TO user1;
      

      实际上,常见的许多错误操作也可能产生用户无法连接上数据库的现象。例如,用户连接的数据库不存在,用户名或密码输入错误等。这些错误操作在客户端工具会有相应的提示信息。

      1
      2
      3
      4
      5
      gsql -d human_resource -p 8000
      gsql: FATAL:  database "human_resource" does not exist
      
      gsql -d human_resource -U user1 -W password -p 8000
      gsql: FATAL:  Invalid username/password,login denied.
      
  • 网络连接故障。

    请检查客户端与数据库服务器间的网络连接。如果发现从客户端无法PING到数据库服务器端,则说明网络连接出现故障。请联系技术支持工程师提供技术支持。

    1
    2
    3
    4
    5
    6
    7
    8
    ping -c 4 10.10.10.1
    PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data.
    From 10.10.10.1: icmp_seq=2 Destination Host Unreachable
    From 10.10.10.1 icmp_seq=2 Destination Host Unreachable
    From 10.10.10.1 icmp_seq=3 Destination Host Unreachable
    From 10.10.10.1 icmp_seq=4 Destination Host Unreachable
    --- 10.10.10.1 ping statistics ---
    4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 2999ms