db_ha集群中某个节点启动失败,报错缺少sm4加密模块

文章目录

环境

系统平台:Linux x86-64 Red Hat Enterprise Linux 8

版本:4.5.1

症状

使用命令 pg_ctl start 启动db_ha集群中的一个节点上的数据库报错,

查看数据库日志,日志中无关于此次启动的任何信息输出。

数据目录中postgresql.conf、postgresql.auto.conf 等配置文件为空文件

报错信息如下,提示缺少加密模块。

复制代码
pg_ctl  start

等待服务器进程启动 ....
2025-07-16 15:51:10.468 CST [15752] FATAL:  database files are encrypted
2025-07-16 15:51:10.468 CST [15752] DETAIL:  The database cluster was initialized with encryption but the server was started without an encryption module.
2025-07-16 15:51:10.468 CST [15752] HINT:  Set the encryption module using encryption_library configuration parameter.
 已停止等待
pg_ctl: 无法启动服务器进程
检查日志输出.

问题原因

数据库为db_ha两节点集群,sm4加密。

启动失败的节点之前一个月一直处于关机状态,且关机前为主库。

由于较长时间未开启,再次开启时db_ha将其降为备库,且做rewind修复数据。

因rewind未正常结束,导致postgresql.conf为空文件,

数据库启动时找不到参数encryption_library = 'sm4'

解决方案

由于该节点数据已完全损坏,需要重新拉取数据,重做备库。

1.更改数据目录名称

mv /data/highgo/data_bak_yyyymmdd

2.新建数据目录

mkdir /data/highgo/data

3.拉取数据

pg_basebackup -h 主库IP -U sysdba -D /data/highgo/data -Fp -Xs -R -P -v

4.启动备库

pg_ctl start

5.主库上查看流复制状态

select * from pg_stat_replication;

6.主库上查看复制槽

select * from pg_replication_slots;

7.在备库上添加复制槽

alter system set primary_slot_name = 'xxxx'; -- 根据上面的查询填写

select pg_reload_conf();

8.切换主节点

db_ha switchover xxx.xxx.xxx.xxx # 原备节点IP

9.新主库创建复制槽

select * from pg_create_physical_replication_slot('db_ha_slot_2');

10.新备库添加复制槽

alter system set primary_slot_name = 'db_ha_slot_2';

11.主库上查看流复制状态

select * from pg_stat_replication;

报错编码

15752

相关推荐
迷迭香yy几秒前
行业板块轮动因子实战从板块资金到因子建模的本地化Python全流程
数据库·人工智能·python
SelectDB42 分钟前
抖音集团 实时数据仓库:Apache Doris / SelectDB 的技术能力与实践
数据库
SelectDB1 小时前
网易 日志与时序数据分析:Apache Doris / SelectDB 的技术能力与实践
数据库
weixin_539446781 小时前
Navicat Premium 17报缺少ODBC驱动
数据库
哦虎!2 小时前
【数据库】事务
java·数据库·mysql
倔强的石头_2 小时前
时序数据库的难题不只在写入速度
数据库
IT古董4 小时前
【WMS学习笔记系列】01-需求分析
大数据·数据库
zlinear数据采集卡4 小时前
数据采集卡从入门到精通(9):分辨率与精度——16位卡不等于1/65536的精度
开发语言·数据库·fpga开发·开源·c#
Mico184 小时前
麒麟v10-MySQL InnoDB Cluster 完整部署与全场景验证(从入门到精通)
数据库·mysql