在 CentOS 上迁移 PostgreSQL 数据库,常见场景有:同版本迁移、跨版本升级迁移、服务器间迁移。下面按最常用、最稳妥的方式说明。
psql --version
pg_lsclusters # 如有
pg_dump -U postgres -h localhost -p 5432 dbname > dbname.sql
scp dbname.sql user@new_server:/tmp/
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 大版本
systemctl stop postgresql
rsync -avz /var/lib/pgsql/12/data/ user@new:/var/lib/pgsql/12/data/
chown -R postgres:postgres /var/lib/pgsql/12/data
systemctl start postgresql
❌ 不能直接复制 data 目录
✅ 使用 pg_dump 或 pg_upgrade
pg_dump -U postgres dbname > db.sql
# 新版本中导入
/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
-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
如果你能告诉我:
我可以给你精确命令。