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

相关推荐
kirs_ur6 小时前
ECC & LDPC — SSD 的数据卫士
服务器·数据库·性能优化
是三一seven7 小时前
Sql注入基础
数据库·安全·网络安全
Sirens.7 小时前
MySQL表设计进阶-约束范式连接索引与事务
android·数据库·mysql
字节跳动开源9 小时前
火山引擎开源 Agent 驱动的搜索自迭代技术
数据库·开源·agent
Oo大司命oO11 小时前
藏在正则表达式里的陷阱
数据库·mysql·正则表达式
_oP_i12 小时前
mysql统计数据库使用存储大小
数据库
会编程的土豆12 小时前
MySQL 入门:库、表、行、主键是什么
linux·数据库·网络协议·http
jjjava2.012 小时前
系统日志:从入门到精通的完整指南
网络·数据库
写代码的强哥12 小时前
云原生数据库与传统数据库相比“新”在哪里
数据库·云原生·架构