PostgreSQL集群重启报属主UID不存在、GID占用故障解决
PostgreSQL集群属主异常导致启动失败的修复方案
问题表现
- 执行集群重启操作时,系统返回报错提示集群所属的用户ID不存在
- 尝试创建对应UID的postgres用户时,系统提示GID 109已被占用,同时该用户需要归属的GID 116用户组不存在
- 手动尝试创建匹配的用户、用户组并修正权限后,集群依然无法正常启动
排查阶段操作记录
执行集群列表查询命令,确认集群处于停机状态:
root@localhost:~# pg_lsclusters 12 main 5432 down /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12 main.log
执行集群重启命令,触发属主不存在报错:
root@localhost:~# pg_ctlcluster 12 main restart Error: The cluster is owned by user id 109 which does not exist
尝试创建UID为109的postgres用户,触发GID占用报错:
root@localhost:~# sudo adduser -UID 109 postgres adduser: The GID 109 is already in use.
最终修复步骤(测试环境/已完备备份场景适用)
注意:该操作会清除原集群数据目录下的所有数据,无有效备份的生产环境谨慎使用
- 再次确认异常集群的基础信息:
root@localhost:~# pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 12 main 5432 down postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
- 停止对应集群的系统服务:
root@localhost:~# sudo systemctl stop postgresql@12-main
- 删除原有异常集群:
root@localhost:~# sudo pg_dropcluster --stop 12 main
- 重新创建同名集群并直接启动:
root@localhost:~# sudo pg_createcluster --start 12 main
执行完成后查看集群状态,返回如下信息即代表服务恢复正常:
Ver Cluster Port Status Owner Data directory Log file 12 main 5432 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
内容的提问来源于stack exchange,提问作者Pfinnn
相关产品推荐
相关产品推荐

