云数据库 GAUSSDB-常见问题处理:创建连接故障
创建连接故障
- gsql: could not connect to server: No route to host
- gsql: FATAL: Invalid username/password,login denied.
- gsql: FATAL: Forbid remote connection with trust method!
数据库由于安全问题,禁止远程登录时使用trust模式。这时需要修改pg_hba.conf里的连接认证信息。请联系管理员处理。
请不要修改pg_hba.conf中数据库集群主机的相关设置,否则可能导致数据库功能故障。建议业务应用部署在数据库集群之外,而非集群内部。
- 在CN所在的主机连接数据库,添加“-h 127.0.0.1”可以连接,去掉后无法连接问题。
通过执行SQL语句“show unix_socket_directory”检查数据库CN使用的Unix套接字目录,是否与shell中的环境变量$PGHOST一致。
如果检查结果不一致,那么修改PGHOST环境变量到GUC参数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: permission denied for database "gaussdb"
DETAIL: User does not have CONNECT privilege.
此问题是由于用户不具备访问该数据库的权限,可以使用如下方法解决。
- 使用管理员用户dbadmin连接数据库。
gsql -d gaussdb -U dbadmin -p 8000
- 赋予该用户访问数据库的权限。
GRANT CONNECT ON DATABASE gaussdb TO user1;
实际上,常见的许多错误操作也可能产生用户无法连接上数据库的现象。如用户连接的数据库不存在,用户名或密码输入错误等。这些错误操作在客户端工具也有相应的提示信息。
gsql -d gaussdb -p 8000 gsql: FATAL: database "gaussdb" does not exist gsql -d gaussdb -U user1 -p 8000 Password for user user1: gsql: FATAL: Invalid username/password,login denied.
- 使用管理员用户dbadmin连接数据库。
- 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)
查看指定数据库的会话连接数上限。
执行如下命令查看连接到指定数据库gaussdb的会话连接数上限。其中-1表示没有对数据库gaussdb设置连接数的限制。
SELECT DATNAME,DATCONNLIMIT FROM PG_DATABASE WHERE DATNAME='gaussdb'; datname | datconnlimit ----------+-------------- gaussdb | -1 (1 row)
查看指定数据库已使用的会话连接数。
执行如下命令查看指定数据库gaussdb上已使用的会话连接数。其中,1表示数据库gaussdb上已使用的会话连接数。
SELECT COUNT(*) FROM PG_STAT_ACTIVITY WHERE DATNAME='gaussdb'; 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部分),导致通信故障;极少数情况是网络故障导致。要排除此问题,请检查数据库的主机名及端口是否正确。
- gsql: could not receive data from server: Connection reset by peer.
同时,检查CN日志中出现类似如下日志“ FATAL: cipher file "/data/coordinator/server.key.cipher" has group or world access”,一般是由于数据目录或部分关键文件的权限被误操作篡改导致。请参照其他正常实例下的相关文件权限,修改回来便可。
- gsql: FATAL: GSS authentication method is not allowed because XXXX user password is not disabled.
目标CN的pg_hba.conf里配置了当前客户端IP使用"gss"方式来做认证,该认证算法不支持用作客户端的身份认证,请修改到"sha256"后再试。请联系管理员处理。
- 请不要修改pg_hba.conf中数据库集群主机的相关设置,否则可能导致数据库功能故障。
- 建议业务应用部署在数据库集群之外,而非集群内部。
- GaussDB学习_gaussdb教程_高斯数据库学习_华为云
- 华为云数据库 RDS for MySQL常见故障排除_华为云
- GaussDB培训_GaussDB教程_高斯数据库培训-华为云
- GaussDB视频教程_gaussdb查看表结构语句_高斯数据库视频教程_华为云
- GaussDB考试_GaussDB数据库考试_高斯数据库考试_华为云
- GaussDB连接_华为Gaussdb_高斯数据库连接_华为云
- GaussDB数据库考试_GaussDB认证_高斯数据库考试_华为云
- 多媒体信息处理技术_媒体处理_数字媒体处理
- GaussDB数据库安全_GaussDB收费吗_高斯数据库安全
- GaussDB学习_gaussdb数据库_高斯数据库学习_华为云