温馨提示×

PostgreSQL如何迁移CentOS

小樊
35
2026-07-21 10:15:27
栏目: 云计算

下面按最常见、最稳妥的方式,给你一个从 CentOS 老环境迁移 PostgreSQL 到新 CentOS 服务器的完整思路与步骤。
适用于 同版本迁移跨服务器迁移,也适用于 CentOS 7 → CentOS 8 / Rocky / Alma 等场景。


一、迁移前的准备

1️⃣ 确认两端版本

psql --version

强烈建议

  • 源库和目标库 大版本一致(如都是 14.x)

如果要升级大版本,需额外使用 pg_upgrade(我可以在另一篇专门讲)。


2️⃣ 确认数据目录

show data_directory;

默认通常是:

/var/lib/pgsql/14/data

3️⃣ 确认 PostgreSQL 服务名

systemctl status postgresql
# 或
systemctl status postgresql-14

二、推荐的迁移方式(✅ 最常用)

✅ 方式一:pg_dump + pg_restore(推荐)

✅ 安全
✅ 可跨版本
✅ 可跨硬件


三、迁移步骤(pg_dump 方式)

① 在 源服务器 执行备份

备份所有数据库(含角色)

pg_dumpall -U postgres > all.sql

或只备份单个数据库:

pg_dump -U postgres -d dbname -F c -f dbname.dump

② 传输备份文件到新服务器

scp all.sql root@新服务器IP:/tmp/

③ 在 新服务器 安装 PostgreSQL

dnf install -y postgresql-server postgresql-contrib
# 或(如 PostgreSQL 14)
dnf install -y postgresql14-server

初始化数据库:

postgresql-setup --initdb

启动并设置开机启动:

systemctl enable --now postgresql

④ 恢复数据

恢复所有数据库

su - postgres
psql -f /tmp/all.sql postgres

或恢复单个数据库

pg_restore -U postgres -d dbname dbname.dump

⑤ 检查数据

psql -U postgres
\l
\dt

四、方式二:物理拷贝 data 目录(⚠️ 不推荐新手)

⚠️ 要求

  • 版本完全一致
  • 架构一致(x86_64)
  • 直接停库复制

步骤简述

systemctl stop postgresql
tar czf pgdata.tar.gz /var/lib/pgsql/14/data
scp pgdata.tar.gz 新服务器:/tmp/

新服务器:

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

五、常见问题排查

❌ 1. 连接失败

password authentication failed

✅ 检查 pg_hba.conf

peer / md5

❌ 2. 字符集不一致

encoding mismatch

✅ 使用 initdb 时指定:

initdb -E UTF8

❌ 3. 新服务器无法启动

journalctl -xe -u postgresql

六、迁移后必须检查清单 ✅

  • [ ] 数据库数量和大小一致
  • [ ] 用户/权限正常
  • [ ] 应用连接正常
  • [ ] 定时任务(cron / pgAgent)
  • [ ] 备份策略是否迁移

七、是否需要我帮你?

你可以直接告诉我:

  1. CentOS 版本(7?8?Rocky?)
  2. PostgreSQL 版本
  3. 物理机 / 云服务器
  4. 是否升级版本

我可以给你 完全定制的一套迁移命令

0