因数据库套接字文件异常导致连接失败的问题

问题现象

已有连接正常运行,新连接出现连接失败报错。

1. [carrotom@openGauss111 carrotom_mppdb]$ gsql -r
2. failed to connect /usr3/carrotom/cluster/om/carrotom_mppdb:15555.

定位方法

  1. 报错中指明了路径与端口/usr3/carrotom/cluster/om/carrotom_mppdb:15555。
  2. 查看数据库参数配置文件,找到数据库运行端口与套接字存放位置,正是报错中的信息。

1. [carrotom@openGauss111 dn1]$ cat postgresql.conf | grep -e port -e unix_socket_directory 2. port = 15555 3. unix_socket_directory = '/usr3/carrotom/cluster/om/carrotom_mppdb'

注意:此处不一样也不要紧,参数配置文件允许在任意时刻修改,但这两个参数只有数据库重启才生效。 3. 查看文件夹内套接字文件数量。

1. [carrotom@openGauss111 cluster]$ ll /usr3/carrotom/cluster/om/carrotom_mppdb -a 2. total 12K 3. drwx------. 2 carrotom carrotom 152 Sep 27 15:00 . 4. drwx------. 7 carrotom carrotom 4.0K Sep 27 11:42 .. 5. srwx------. 1 carrotom carrotom 0 Sep 27 15:00 .gaussUDF.socket 6. s---------. 1 carrotom carrotom 0 Sep 27 15:18 .s.PGSQL.15555 7. -rw-------. 1 carrotom carrotom 93 Sep 27 15:00 .s.PGSQL.15555.lock 8. srwx------. 1 carrotom carrotom 0 Sep 27 15:00 .s.PGSQL.15556 9. -rw-------. 1 carrotom carrotom 93 Sep 27 15:00 .s.PGSQL.15556.lock

可以发现15555端口的套接字文件异常,访问权限为0。

问题根因

套接字文件权限异常或丢失的原因有很多,常见的原因有:

  • 系统错误
  • 磁盘空间不足
  • 存放socket文件的目录无访问权限
  • 数据库管理员误操作
  • 恶意病毒软件或黑客破坏
  • 其他异常问题

解决方案

可通过chmod、chown修改属主、权限即可修复。

无其他影响。

另外,数据库除了port配置端口之外,还有一个+1端口,如图所示为15556,是运维预留端口,套接字存在的话可以进行连接。