Linux postgres 无法访问文件 “decoderbufs“: 没有那个文件或目录

背景:postgres运作着突然挂了,然后用systemctl status postgresql-11.service查看数据库状态发现服务挂了。就想着用systemctl restart postgresql-11.service重启结果报错Job for postgresql-11.service failed because the control process exited with error code. See "systemctl status postgresql-11.service" and "journalctl -xe" for details.。

这个问题排查用了五六个小时,前面还有很多问题,忘记了,只能从这里开始讲了。

如果有需要可以私信或者留言。

根本原因怀疑是有人动了服务器把postgres-dev给删了,导致雪崩效应

下面开始排查和解决

restart postgresql-11.service重启失败,journalctl -xe日志显示内存不足。

        这是因为postgresql被装在了/var/lib/pgsql中,所以它的数据库文件和表就占用了“/”根目录下的内存。由于postgis存了大量的shp数据,导致内存炸了。

        解决方法就是找到物理库和表,我的是在/var/lib/pgsql/11/data/base中,然后对数据进行迁移,把空间空出来就OK了。

继续重启失败,日志显示/usr/pgsql-11/lib/pgxs/src/makefiles/pgxs.mk: 没有那个文件或目录

我出现这个原因是因为postgresql11-devel模块被删了导致的,所以开始使用yum安装devel。

 yum install postgresql-devel

安装postgresql-devel报错

https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found 正在尝试其它镜像。 To address this issue please refer to the below wiki article\

      这是因为yum在安装postgresql9.5相关资源的,因为没找到资源路径404,导致的。而为什么会安装postgresql9.5呢,是因为yum在安装东西的时候会先把/etc/yum.repos.d里面的资源下载到缓存区内(已经在缓存区的就不会再次下载)。并且它的下载会根据/etc/yum.repos.d目录里的.repo文件配置下载。而我的pdgd文件里配置了多个版本的postgresql资源节点,里面就有9.5版本的。所以导致yum会自动安装其他版本的,所以我就把其他版本的注释了,保留了11版本。

      注释完使用下面第二块代码区的命令清缓存,重新安装。

#pgdg-redhat-all.repo文件内容


#[pgdg12]
#name=PostgreSQL 12 for RHEL/CentOS $releasever - $basearch
#baseurl=https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-$releasever-$basearch
#enabled=1
#gpgcheck=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG

[pgdg11]
name=PostgreSQL 11 for RHEL/CentOS $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG

#[pgdg10]
#name=PostgreSQL 10 for RHEL/CentOS $releasever - $basearch
#baseurl=https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-$releasever-$basearch
#enabled=1
#gpgcheck=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG

#[pgdg96]
#name=PostgreSQL 9.6 for RHEL/CentOS $releasever - $basearch
#baseurl=https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-$releasever-$basearch
#enabled=1
#gpgcheck=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG

#[pgdg95]
#name=PostgreSQL 9.5 for RHEL/CentOS $releasever - $basearch
#baseurl=https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-$releasever-$basearch
#enabled=1
#gpgcheck=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG

#[pgdg94]
#name=PostgreSQL 9.4 for RHEL/CentOS $releasever - $basearch
#baseurl=https://download.postgresql.org/pub/repos/yum/9.4/redhat/rhel-$releasever-$basearch
#enabled=0
#gpgcheck=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
--清除缓存
sudo yum clean all

--重新安装缓存
sudo yum makecache

继续安装,安装时报错:缺少依赖

[root@host14 yum.repos.d]# sudo yum install postgresql11-devel
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 postgresql11-devel.x86_64.0.11.20-1PGDG.rhel7 将被 安装
--> 正在处理依赖关系 postgresql11-libs(x86-64) = 11.20-1PGDG.rhel7,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 postgresql11(x86-64) = 11.20-1PGDG.rhel7,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 perl(Test::More) >= 0.87,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 llvm5.0-devel >= 5.0,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 llvm-toolset-7-clang >= 4.0.1,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 perl-Test-Simple,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 perl(Test::More),它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 perl(IPC::Run),它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 libicu-devel,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在检查事务
---> 软件包 postgresql11.x86_64.0.11.14-1PGDG.rhel7 将被 升级
--> 正在处理依赖关系 postgresql11(x86-64) = 11.14-1PGDG.rhel7,它被软件包 postgresql11-contrib-11.14-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 postgresql11(x86-64) = 11.14-1PGDG.rhel7,它被软件包 postgresql11-server-11.14-1PGDG.rhel7.x86_64 需要
---> 软件包 postgresql11.x86_64.0.11.20-1PGDG.rhel7 将被 更新
---> 软件包 postgresql11-devel.x86_64.0.11.20-1PGDG.rhel7 将被 安装
--> 正在处理依赖关系 perl(Test::More) >= 0.87,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 llvm5.0-devel >= 5.0,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 llvm-toolset-7-clang >= 4.0.1,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 perl-Test-Simple,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 perl(Test::More),它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 perl(IPC::Run),它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 libicu-devel,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
---> 软件包 postgresql11-libs.x86_64.0.11.14-1PGDG.rhel7 将被 升级
---> 软件包 postgresql11-libs.x86_64.0.11.20-1PGDG.rhel7 将被 更新
--> 正在检查事务
---> 软件包 postgresql11-contrib.x86_64.0.11.14-1PGDG.rhel7 将被 升级
---> 软件包 postgresql11-contrib.x86_64.0.11.20-1PGDG.rhel7 将被 更新
---> 软件包 postgresql11-devel.x86_64.0.11.20-1PGDG.rhel7 将被 安装
--> 正在处理依赖关系 perl(Test::More) >= 0.87,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 llvm5.0-devel >= 5.0,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 llvm-toolset-7-clang >= 4.0.1,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 perl-Test-Simple,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 perl(Test::More),它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 perl(IPC::Run),它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
--> 正在处理依赖关系 libicu-devel,它被软件包 postgresql11-devel-11.20-1PGDG.rhel7.x86_64 需要
---> 软件包 postgresql11-server.x86_64.0.11.14-1PGDG.rhel7 将被 升级
---> 软件包 postgresql11-server.x86_64.0.11.20-1PGDG.rhel7 将被 更新
--> 解决依赖关系完成
错误:软件包:postgresql11-devel-11.20-1PGDG.rhel7.x86_64 (pgdg11)
          需要:llvm-toolset-7-clang >= 4.0.1
错误:软件包:postgresql11-devel-11.20-1PGDG.rhel7.x86_64 (pgdg11)
          需要:llvm5.0-devel >= 5.0
错误:软件包:postgresql11-devel-11.20-1PGDG.rhel7.x86_64 (pgdg11)
          需要:perl(IPC::Run)
错误:软件包:postgresql11-devel-11.20-1PGDG.rhel7.x86_64 (pgdg11)
          需要:libicu-devel
错误:软件包:postgresql11-devel-11.20-1PGDG.rhel7.x86_64 (pgdg11)
          需要:perl(Test::More) >= 0.87
错误:软件包:postgresql11-devel-11.20-1PGDG.rhel7.x86_64 (pgdg11)
          需要:perl(Test::More)
错误:软件包:postgresql11-devel-11.20-1PGDG.rhel7.x86_64 (pgdg11)
          需要:perl-Test-Simple
 您可以尝试添加 --skip-broken 选项来解决该问题
 您可以尝试执行:rpm -Va --nofiles --nodigest

        这是因为dev被删了以后,好像相关依赖也被连根拔起了,或者有可能被放到同一个文件夹里了。所以找到缺少的依赖一个个安装回去。


--我这里缺少llvm-toolset-7-clang、llvm5.0-devel、perl(IPC::Run)、libicu-devel、perl(Test::More)和perl-Test-Simple这些依赖软件包
--所以按照他们
--建议一个一个按照,遇到问题好单独解决
sudo yum install llvm-toolset-7-clang llvm5.0-devel perl-IPC-Run libicu-devel perl-Test-More perl-Test-Simple

安装完postgresql11-devel继续重启失败,日志显示Linux postgres 无法访问文件 “decoderbufs“: 没有那个文件或目录

        这是因为decoderbufs文件被删了,"decoderbufs" 是 PostgreSQL 中的一个扩展,它用于逻辑解码和发布更改数据。所以安装"decoderbufs",这个是参照下面的大神的。

debezium 之五 安装postgres-decoderbufs_decoderbufs 安装_数据库人生的博客-CSDN博客规划192.168.56.11 k1192.168.56.12 k2192.168.56.13 k3192.168.56.21 pg11n1192.168.56.22 pg11n2主机 pg11n1 、pg11n2上安装好 postgresql 11 后,需要安装 postgres-decoderbufsdebezium 需要插件 decoderbufs 或者 wal2json ,或者 pgoutput。postgres-decoderbufs 有如下依赖1)PostgreS_decoderbufs 安装https://blog.csdn.net/ctypyb2002/article/details/121367392

安装完继续重启,失败,日志显示

7月 22 20:49:33 host14 postmaster[11486]: 2023-07-22 20:49:33.554 CST [11486] 致命错误:  锁文件 "postmaster.pid" 已经存在
7月 22 20:49:33 host14 postmaster[11486]: 2023-07-22 20:49:33.554 CST [11486] 提示:  是否其它 postmaster (PID 32279) 运行在数据目录 "/var/lib/pgsql/11/data"?
7月 22 20:49:33 host14 systemd[1]: postgresql-11.service: main process exited, code=exited, status=1/FAILURE
7月 22 20:49:33 host14 systemd[1]: Failed to start PostgreSQL 11 database server.
-- Subject: Unit postgresql-11.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit postgresql-11.service has failed.
-- 
-- The result is failed.
7月 22 20:49:33 host14 systemd[1]: Unit postgresql-11.service entered failed state.
7月 22 20:49:33 host14 systemd[1]: postgresql-11.service failed.

        这是因为前面的一个postgresql进程没有被正常关掉。

        两个方法,一个是使用ps -ef | grep postmaster检查正在运行的进程,我这里显示没有进程所以用第二个方法

ps -ef | grep postmaster

        另一个是到/var/lib/pgsql/11/data/里,把postmaster.pid文件手动删掉

sudo rm /var/lib/pgsql/11/data/postmaster.pid
sudo systemctl start postgresql-11

解决后继续重启,失败,日志显示端口占用

Unit postgresql-11.service has begun starting up.
7月 22 20:51:37 host14 postmaster[25286]: 2023-07-22 20:51:37.736 CST [25286] 日志:  无法绑定IPv4地址"0.0.0.0": 地址已在使用
7月 22 20:51:37 host14 postmaster[25286]: 2023-07-22 20:51:37.736 CST [25286] 提示:  是否有其它 postmaster 已经在端口 5432 上运行了? 如果没有, 请等待几秒钟后然后再重试.
7月 22 20:51:37 host14 postmaster[25286]: 2023-07-22 20:51:37.736 CST [25286] 日志:  无法绑定IPv6地址"::": 地址已在使用
7月 22 20:51:37 host14 postmaster[25286]: 2023-07-22 20:51:37.736 CST [25286] 提示:  是否有其它 postmaster 已经在端口 5432 上运行了? 如果没有, 请等待几秒钟后然后再重试.
7月 22 20:51:37 host14 postmaster[25286]: 2023-07-22 20:51:37.736 CST [25286] 警告:  无法为 "*" 创建监听套接字
7月 22 20:51:37 host14 systemd[1]: postgresql-11.service: main process exited, code=exited, status=1/FAILURE
7月 22 20:51:37 host14 postmaster[25286]: 2023-07-22 20:51:37.736 CST [25286] 致命错误:  无法创建TCP/IP套接字
7月 22 20:51:37 host14 postmaster[25286]: 2023-07-22 20:51:37.736 CST [25286] 日志:  数据库系统已关闭
7月 22 20:51:37 host14 systemd[1]: Failed to start PostgreSQL 11 database server.
-- Subject: Unit postgresql-11.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit postgresql-11.service has failed.
-- 
-- The result is failed.

        这是因为有java在数据库正常的时候调用了它的资源,但是正在调用的时候,数据库服务挂了,导致没法正常释放连接。所以我们手动kill掉。

--先运行下面的,检查端口冲突
sudo netstat -tulpn | grep 5432

--我这里没有,所以运行下面的查看进程
sudo lsof -i :5432

--找到后使用kill 进程ID
kill 25648(模拟的ID)

最后重启systemctl restart postgresql-11.service,没有输出就可以了

使用systemctl status postgresql-11.service查看服务状态

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值