温馨提示×

centos如何迁移postgresql

小樊
33
2026-10-23 23:35:35
栏目: 云计算

在 CentOS 上迁移 PostgreSQL,通常有以下几种常见场景。我先给你整体思路,再给具体可操作步骤。


一、迁移方式选择

场景 推荐方式
同版本、同架构、整机迁移 物理文件拷贝(最快)
跨版本升级 pg_dump / pg_dumpall
跨服务器但版本一致 pg_dump + psql 或 物理复制
大数据量、低停机 流复制 / pg_basebackup

二、准备工作(新旧机器都要做)

1. 查看 PostgreSQL 版本

psql --version
rpm -qa | grep postgres

2. 确认数据目录

psql -c "SHOW data_directory;"

常见路径:

  • /var/lib/pgsql/12/data
  • /var/lib/pgsql/13/data

三、方式一:使用 pg_dump 迁移(最通用 ✅)

1. 旧服务器导出数据

# 导出单个数据库
pg_dump -U postgres dbname > dbname.sql

# 导出所有数据库(含角色)
pg_dumpall -U postgres > all.sql

2. 传输到新服务器

scp dbname.sql user@new_server:/tmp/

3. 新服务器导入

# 创建数据库(如需要)
createdb -U postgres dbname

# 导入
psql -U postgres dbname < /tmp/dbname.sql

四、方式二:物理文件迁移(同版本推荐 ⚡)

1. 停止 PostgreSQL

systemctl stop postgresql

2. 打包数据目录

tar czf pgdata.tar.gz /var/lib/pgsql/12/data

3. 拷贝到新服务器

scp pgdata.tar.gz user@new_server:/var/lib/pgsql/12/

4. 新服务器恢复

systemctl stop postgresql
rm -rf /var/lib/pgsql/12/data
tar xzf pgdata.tar.gz -C /var/lib/pgsql/12/
chown -R postgres:postgres /var/lib/pgsql/12/data
systemctl start postgresql

⚠️ 注意:

  • PostgreSQL 大版本必须一致
  • SELinux 可能影响权限

五、方式三:使用 pg_basebackup(适合主从/迁移)

pg_basebackup -h old_host -U repl -D /var/lib/pgsql/12/data -P -X stream

六、迁移后检查

psql -c "\l"
psql -c "\dt"

检查:

  • 用户权限
  • 扩展(extension)
  • 防火墙端口(5432)

七、常见问题

1. 权限错误

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

2. SELinux 问题

setenforce 0
# 或
semanage fcontext -a -t postgresql_db_t "/var/lib/pgsql(/.*)?"
restorecon -Rv /var/lib/pgsql

如果你能告诉我:

  • PostgreSQL 版本
  • 是否跨服务器
  • 是否跨版本
  • 数据量大小

我可以给你更精确的迁移方案。

0 踩