云数据库 GAUSSDB-常见问题处理:创建连接故障

时间:2023-11-24 09:33:50

创建连接故障

  • gsql: could not connect to server: No route to host

    此问题一般是指定了不可达的地址或者端口导致的。请检查-h参数与-p参数是否添加正确。

  • gsql: FATAL: Invalid username/password,login denied.

    此问题一般是输入了错误的用户名和密码导致的,请联系数据库管理员,确认用户名和密码的正确性。

  • CN所在的主机连接数据库,添加“-h 127.0.0.1”可以连接,去掉后无法连接问题。

    通过执行SQL语句“show unix_socket_directory”检查数据库CN使用的Unix套接字目录,是否与shell中的环境变量$PGHOST一致。

    如果检查结果不一致,那么修改PGHOST环境变量到GUC参数unix_socket_directory指向的目录便可。

    关于unix_socket_directory的更多信息,详见连接设置章节中的说明。

  • The "libpq.so" loaded mismatch the version of gsql, please check it.

    此问题是由于环境中使用的libpq.so的版本与gsql的版本不匹配导致的,请通过“ldd gsql”命令确认当前加载的libpq.so的版本,并通过修改LD_LIBRARY_PATH环境变量来加载正确的libpq.so。

    请参照下面示例,修改LD_LIBRARY_PATH环境变量。其中${path_to_correct_libpq_dir}表示实际环境中正确libpq.so所在目录

    export LD_LIBRARY_PATH=${path_to_correct_libpq_dir}:$LD_LIBRARY_PATH
  • gsql: symbol lookup error: xxx/gsql: undefined symbol: libpqVersionString

    此问题是由于环境中使用的libpq.so的版本与gsql的版本不匹配导致的(也有可能是环境中存在PostgreSQL的libpq.so),请通过“ldd gsql”命令确认当前加载的libpq.so的版本,并通过修改LD_LIBRARY_PATH环境变量来加载正确的libpq.so。

  • gsql: connect to server failed: Connection timed out

    Is the server running on host "xx.xxx.xxx.xxx" and accepting TCP/IP connections on port xxxx?

    此问题是由于网络连接故障造成。请检查客户端与数据库服务器间的网络连接。如果发现从客户端无法PING到数据库服务器端,则说明网络连接出现故障。请联系网络管理人员排查解决。

    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
  • gsql: FATAL: sorry, too many clients already,active/non-active: 197/3.

    此问题是由于系统连接数量超过了最大连接数量。请联系数据库DBA进行会话连接数管理,释放无用会话。

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

    会话状态可以在视图PG_STAT_ACTIVITY中查看。无用会话可以使用函数pg_terminate_backend进行释放。

    select datid,pid,state from pg_stat_activity;
     datid |       pid       | state  
    -------+-----------------+--------
     13205 | 139834762094352 | active
     13205 | 139834759993104 | idle
    (2 rows)

    其中pid的值即为该会话的线程ID。根据线程ID结束会话。

    SELECT PG_TERMINATE_BACKEND(139834759993104);

    显示类似如下信息,表示结束会话成功。

    PG_TERMINATE_BACKEND
    ----------------------
     t
    (1 row)
    表1 查看会话连接数

    描述

    命令

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

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

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

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

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

    SELECT COUNT(*) FROM dv_sessions WHERE USERNAME='user1';
    
     count
    -------
         1
    (1 row)

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

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

    SELECT DATNAME,DATCONNLIMIT FROM PG_DATABASE WHERE DATNAME='postgres';
    
     datname  | datconnlimit
    ----------+--------------
     postgres |           -1
    (1 row)

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

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

    SELECT COUNT(*) FROM PG_STAT_ACTIVITY WHERE DATNAME='postgres';
     count 
    -------
         1
    (1 row)

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

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

    SELECT COUNT(*) FROM dv_sessions;
     
     count
    -------
         10
    (1 row)
  • gsql: wait xxx.xxx.xxx.xxx:xxxx timeout expired

    gsql在向数据库发起连接的时候,会有5分钟超时机制,如果在这个超时时间内,数据库未能正常的对客户端请求进行校验和身份认证,那么gsql会退出当前会话的连接过程,并报出如上错误。

    一般来说,此问题是由于连接时使用的-h参数及-p参数指定的连接主机及端口有误(即错误信息中的xxx部分),导致通信故障;极少数情况是网络故障导致。要排除此问题,请检查数据库的主机名及端口是否正确。

support.huaweicloud.com/devg-v1-gaussdb/gaussdb_devg_0033.html