温馨提示×

CentOS怎么恢复PostgreSQL

小樊
50
2026-08-05 00:44:43
栏目: 云计算

在 CentOS 上“恢复 PostgreSQL”通常指从备份恢复数据,也可能是误删/损坏后重新安装。下面按最常见场景给你一套完整、可操作的恢复方案。


一、确认当前状态(先别急着操作)

# 查看 PostgreSQL 是否安装
rpm -qa | grep postgresql

# 查看服务状态
systemctl status postgresql

常见版本路径:

  • CentOS 7:PostgreSQL 9.2 / 10 / 12 / 13 / 14
  • 数据目录一般在:
    /var/lib/pgsql/data
    /var/lib/pgsql/<版本>/data
    

二、从备份恢复 PostgreSQL(最常见)

✅ 1. 使用 pg_dump 备份恢复(逻辑恢复)

恢复 SQL 备份

su - postgres
psql -d 数据库名 -f /备份路径/backup.sql

或新建数据库再恢复:

createdb testdb
psql testdb < backup.sql

✅ 2. 使用 pg_basebackup 恢复(物理恢复,推荐生产环境)

前提

  • 基础备份
  • WAL 归档

恢复步骤

  1. 停止数据库
systemctl stop postgresql
  1. 清空原数据目录(⚠️ 先备份)
mv /var/lib/pgsql/data /var/lib/pgsql/data.bak
  1. 恢复基础备份
cp -r /备份目录/basebackup /var/lib/pgsql/data
chown -R postgres:postgres /var/lib/pgsql/data
  1. 配置恢复参数
vi /var/lib/pgsql/data/postgresql.conf
restore_command = 'cp /wal归档路径/%f %p'
recovery_target_time = '2025-01-01 10:00:00'
  1. 创建恢复标识
touch /var/lib/pgsql/data/recovery.signal
  1. 启动数据库
systemctl start postgresql

三、误删 PostgreSQL,重新安装并恢复

✅ 1. 重新安装 PostgreSQL

CentOS 7 示例(PostgreSQL 12)

yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql12-server postgresql12-contrib

初始化

/usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12

✅ 2. 恢复数据目录(如果有旧 data)

systemctl stop postgresql
cp -r /旧data目录 /var/lib/pgsql/12/data
chown -R postgres:postgres /var/lib/pgsql/12/data
systemctl start postgresql

四、常见错误与解决

❌ 1. 数据目录权限错误

data directory "/var/lib/pgsql/data" has group or world access

✅ 解决:

chmod 700 /var/lib/pgsql/data
chown postgres:postgres /var/lib/pgsql/data

❌ 2. 版本不匹配

database files are incompatible with server

✅ 解决:

  • 必须 同版本恢复
  • 或升级 PostgreSQL

五、快速判断你该用哪种方式

情况 推荐方式
.sql 文件 psql 恢复
有 basebackup 物理恢复
整个数据库被删 重装 + 恢复
单表误删 pg_dump 单表恢复

六、如果你愿意,我可以更精确帮你

你可以直接告诉我:

  1. CentOS 版本
  2. PostgreSQL 版本
  3. 是误删 / 崩溃 / 还是从备份恢复
  4. 备份类型(sql / basebackup / 云备份)

我可以给你一步一步精确到命令的恢复方案。

0