下面按最常见、最稳妥的方式,给你一个从 CentOS 老环境迁移 PostgreSQL 到新 CentOS 服务器的完整思路与步骤。
适用于 同版本迁移 或 跨服务器迁移,也适用于 CentOS 7 → CentOS 8 / Rocky / Alma 等场景。
psql --version
✅ 强烈建议:
如果要升级大版本,需额外使用 pg_upgrade(我可以在另一篇专门讲)。
show data_directory;
默认通常是:
/var/lib/pgsql/14/data
systemctl status postgresql
# 或
systemctl status postgresql-14
✅ 安全
✅ 可跨版本
✅ 可跨硬件
pg_dumpall -U postgres > all.sql
或只备份单个数据库:
pg_dump -U postgres -d dbname -F c -f dbname.dump
scp all.sql root@新服务器IP:/tmp/
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
⚠️ 要求
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
password authentication failed
✅ 检查 pg_hba.conf
peer / md5
encoding mismatch
✅ 使用 initdb 时指定:
initdb -E UTF8
journalctl -xe -u postgresql
你可以直接告诉我:
我可以给你 完全定制的一套迁移命令 ✅