温馨提示×

怎么迁移CentOS的PostgreSQL数据

小樊
42
2026-07-09 17:32:50
栏目: 云计算

迁移 CentOS 上的 PostgreSQL 数据 常见有几种方式,下面按最常用、最安全的顺序给你说明,并附上完整示例。你可以根据场景选择。


一、迁移前准备(通用)

1. 确认 PostgreSQL 版本

psql --version

rpm -qa | grep postgresql

2. 确认数据目录

sudo -u postgres psql -c "SHOW data_directory;"

常见路径:

  • /var/lib/pgsql/版本/data
  • /var/lib/postgresql/版本/main

二、方式一(✅ 推荐):使用 pg_dump / pg_restore(跨版本、最安全)

适合:

  • 升级 PostgreSQL
  • 迁移到新服务器
  • 不同操作系统

1. 在源服务器备份

sudo -u postgres pg_dumpall > /tmp/pg_full_backup.sql

或只备份某个库:

sudo -u postgres pg_dump dbname > /tmp/dbname.sql

2. 拷贝到目标服务器

scp /tmp/pg_full_backup.sql user@new_server:/tmp/

3. 在目标服务器恢复

sudo -u postgres psql -f /tmp/pg_full_backup.sql

优点

  • 安全
  • 支持跨版本
  • 不依赖物理文件

缺点

  • 大数据量时较慢

三、方式二:物理复制数据目录(同版本、最快)

适合:

  • 同 PostgreSQL 版本
  • 同一台机器或相同系统

1. 停止 PostgreSQL

systemctl stop postgresql

2. 备份原数据目录

cp -a /var/lib/pgsql/14/data /var/lib/pgsql/14/data_bak

3. 拷贝到新位置

cp -a /var/lib/pgsql/14/data /new/path/data

4. 修改权限(非常重要)

chown -R postgres:postgres /new/path/data

5. 修改 systemd 配置

vim /usr/lib/systemd/system/postgresql-14.service

修改:

Environment=PGDATA=/new/path/data

6. 重载并启动

systemctl daemon-reload
systemctl start postgresql

优点

  • 原样迁移

缺点

  • 版本必须一致
  • 权限错误容易起不来

四、方式三:使用 rsync 在线迁移(停机时间短)

rsync -avz /var/lib/pgsql/14/data/ new_server:/var/lib/pgsql/14/data/

⚠️ 建议:

  • 先停库再 rsync
  • 或第一次同步后停库再增量同步一次

五、方式四:主从 / 流复制(高可用迁移)

适合:

  • 不停机迁移
  • 生产环境

流程简述:

  1. 新服务器作为 replica
  2. 同步完成后切换主库

如果你需要,我可以单独给你 流复制迁移方案


六、常见问题排查

1. 启动报错

data directory has wrong ownership

✅ 解决:

chown -R postgres:postgres /var/lib/pgsql

2. SELinux 问题(CentOS 常见)

setenforce 0

或:

semanage fcontext -a -e /var/lib/pgsql /new/path/data
restorecon -Rv /new/path/data

七、迁移建议总结

场景 推荐方式
升级 PostgreSQL pg_dump
同版本迁移 物理复制
跨服务器 pg_dump / rsync
生产不停机 流复制

如果你愿意,可以告诉我:

  • PostgreSQL 版本
  • 是否跨服务器
  • 数据量大小
  • 是否允许停机

我可以给你 精确到命令级别 的迁移方案 ✅

0