暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

AntDB数据库常见问题FAQ——数据库连接

1493

FATAL: database “cz” does not exist

解决方式

未指定数据库实例名。
adb 需要指定 -d 选项 或 在环境变量添加 PGDATABASE=xxx

adb -d shcrm -p xxx -U xxx

原因说明

adb连接时,若不指定数据库名称,则以下述顺序优先选择:
环境变量 $PGDATABASE > adb登录时的用户名
若上述2个配置名称在数据库中均不存在,则抛出高错误。


adb: could not connect to server: Connection refused

解决方式

未指定数据库主机IP。
adb 需要指定 -h 选项 或 在环境变量添加 PGHOST=x.x.x.x

adb -h xxx -d xxx -p xxx -U xxx

原因说明


adb: could not connect to server: No such file or directory

解决方式

未指定数据库监听端口。
adb 需要指定 -p 选项 或 在环境变量添加 PGPORT=xxx

adb -p xxx -d xxx -U xxx

原因说明


FATAL: role “cz” does not exist

解决方式

未指定数据库连接用户名。
adb 需要指定 -U 选项 或 在环境变量添加 PGUSER=xxx

adb -U xxx -d xxx -p xxx

原因说明


adb: could not connect to server: Connection refused

解决方式

为安全起见,默认禁用了远程连接访问功能,只允许localhost连接。那么,如何启用该功能呢?
为了启用网络或者远程访问功能,我们需要在postgresql.conf文件中添加或者编辑下列内容:
  listen_addresses = '*'
在adb_hba.conf添加如下内容,以便允许用户通过某种method来访问数据库:

# TYPE DATABASE USER CIDR-ADDRESS METHOD

host all all 10.20.21.0/24 trust

postgresql.conf

配置项 说明
listen_addresses = ‘*’ listen_addresses指定了要侦听的IP地址。默认只监听localhost的地址,也就是禁止远程服务器来访问。在大多数情况下,我们会接受所有主机的连接,所以可以使用“*”,它表示所有IP地址。如果只接受指定ip的连接,则在adb_hba.conf进行配置。

adb_hba.conf

配置项 说明
TYPE Type = host表示远程连接。Type = local表示本地Unix domain socket连接。
DATABASE Database = all 表示所有数据库。其他名字要求严格匹配,还可以规定一个由逗号分隔的数据库列表。
USER User = all 表示所有用户。其他名字要求严格匹配,还可以规定一个由逗号分隔的用户列表。
CIDR-ADDRESS CIDR-ADDRESS 由两部分组成,即IP地址/子网掩码。子网掩码规定了IP地址中前面哪些位表示网络编号。这里/0表示IP地址中没有表示网络编号的位,这样的话全部的IP地址都匹配,例如192.168.0.0/24表示匹配前24位,所以它匹配任何192.168.0.x形式的IP地址。
METHOD Method = trust表示可信认证,允许免密登录。其他的认证方法包括MD5,则要求客户端输入密码验证才能访问数据库

其他的一些可能的原因,如下:

  • 服务端没起来,ps -ef|grep postgres查看是否存在postgres进程
  • 监听问题,cat postgresql.conf|grep listen 查看监听地址是否正确
  • 以上都没问题,服务器端能连进去,但客户端不行,这时需要查看adb_hba.conf
  • 以上都没问题,检查服务器端的iptables,开启防火墙的访问端口
  • 以上都没问题,检查SELINUX,确保SELINUX已关闭

原因说明

按上述说明依次排查


Fatal:connection limit exceeded for non-supersers

解决方式

数据库连接数达到上限,需要调整最大连接数配置。

max_connections是数据库允许的最大连接数,默认值100,
superuser_reserved_connections是预留给超级用户的连接数,默认值3
修改这两个参数都需要重启DB。
与之相关联的参数还有work_mem,连接数*work_mem可以得到DB的内存大小,这个调整视服务器的内存大小

原因说明

按上述说明增大max_connections的配置,并重启数据库服务生效。

FATAL: password authentication failed for user “his”

解决方式

请检查输入的密码是否正确?
此处的密码指该用户his在数据库中对应的密码,非操作系统登录密码。

原因说明

密码不正确,请确认密码的正确性。


FATAL: no adb_hba.conf entry for host “10.21.28.35”, user “adb01”, database “postgres”, SSL off

解决方式

AntDB单机版本:

adb_hba.conf添加一行可信任配置:

host all all 10.21.28.0/24 md5

重新加载配置即可。其中 10.21.28.0 需要访问数据库的客户端IP网段。

adb_ctl -D /data/pgxc_data/cd1/  reload

-D 后面的参数为数据目录。

reload执行成功后,重新尝试登录。

建议在主备环境上都执行下,防止主备切换后应用无法连接现在的备节点。

AntDB集群版本:
登录adbmgr执行下述命令即可:

add hba coordinator all("host all all 10.21.28.0 24 md5");
add hba gtmcoord all("host all all 10.21.28.0 24 md5");

示例中的IP根据实际情况进行修改。

如果执行报错,通过\h add hba可查看帮助信息。

执行成功后,重新尝试登录。

原因说明

节点的adb_hba.conf未配置该IP信息。


adb_ctl: could not open PID file “/ssd/adb40sy/data/cd/adb_hba.conf/postmaster.pid”: Not a directory

解决方式

通过adb_ctl reload重新加载配置文件时,只需要指定 -D ,即数据库的数据目录,勿需指定到具体的配置文件。
程序会自动重新加载改动后的配置信息。
以下给出一个示例说明:

--错误的方式
adb_ctl -D /ssd/adb40sy/data/cd/adb_hba.conf reload
--正确的方式
adb_ctl -D /ssd/adb40sy/data/cd/ reload

原因说明

adb_ctl reload -D 指定数据目录路径即可,勿需指定到某个具体的配置文件。


cached plan must not change result

解决方式

在jdbc连接串中禁用prepareThreshold功能即可。
以下给出一个示例说明:

jdbc:postgresql://10.78.187.107:5432/postgres?binaryTransfer=False&forceBinary=False&grammar=oracle&prepareThreshold=0

原因说明

执行计划会在服务端被缓存起来,以降低重新生成执行同样计划的开销。
但若在运行过程中更改了表结构,则JDBC就会抛出该异常。
在jdbc连接串中 添加 prepareThreshold=0,禁用jdbc的该功能即可。默认prepareThreshold设置为5.


最后修改时间:2023-02-28 10:54:28
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论