温馨提示×

centos如何迁移postgresql数据库

小樊
41
2026-10-09 08:02:13
栏目: 云计算

在 CentOS 上迁移 PostgreSQL 数据库,常见场景有:同版本迁移、跨版本升级迁移、服务器间迁移。下面按最常用、最稳妥的方式说明。


一、迁移前准备

1. 确认信息

  • 源数据库:IP、端口、版本、数据目录
  • 目标数据库:CentOS 版本、PG 版本、数据目录
  • 数据库名、用户名
psql --version
pg_lsclusters   # 如有

2. 停止写入(重要)

  • 迁移前建议停止应用
  • 或开启只读模式

二、同服务器 / 同版本迁移(推荐:pg_dump)

1. 导出数据库

pg_dump -U postgres -h localhost -p 5432 dbname > dbname.sql

2. 传输到目标服务器

scp dbname.sql user@new_server:/tmp/

3. 目标服务器导入

psql -U postgres -d dbname -f /tmp/dbname.sql

✅ 适合大多数场景
✅ 不依赖数据目录
✅ 跨小版本安全


三、服务器间整库迁移(推荐)

源服务器

pg_dump -U postgres -h 127.0.0.1 dbname | \
ssh user@目标IP "psql -U postgres -d dbname"

或先 dump 再传。


四、物理迁移(数据目录复制)

⚠️ 仅限同 PostgreSQL 大版本

1. 停止 PostgreSQL

systemctl stop postgresql

2. 复制数据目录

rsync -avz /var/lib/pgsql/12/data/ user@new:/var/lib/pgsql/12/data/

3. 修改权限

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

4. 启动

systemctl start postgresql

五、跨大版本迁移(如 10 → 15)

❌ 不能直接复制 data 目录
✅ 使用 pg_dump 或 pg_upgrade

方法 1(推荐):dump + restore

pg_dump -U postgres dbname > db.sql
# 新版本中导入

方法 2:pg_upgrade(高级)

/usr/pgsql-15/bin/pg_upgrade \
  --old-datadir=/var/lib/pgsql/12/data \
  --new-datadir=/var/lib/pgsql/15/data \
  --old-bindir=/usr/pgsql-12/bin \
  --new-bindir=/usr/pgsql-15/bin

六、常见注意事项

  • 用户、权限需手动创建
  • 扩展(extension)需提前安装
  • 大表建议用 -j 并行
pg_dump -j 4 -Fd dbname -f dump_dir

七、示例完整流程

# 源
pg_dump -U postgres mydb > mydb.sql

# 目标
createdb mydb
psql -U postgres mydb < mydb.sql

如果你能告诉我:

  • PostgreSQL 版本
  • 是否跨服务器
  • 是否跨版本

我可以给你精确命令。

0 踩