在 CentOS 上迁移 PostgreSQL 数据,常见有几种方式,下面按最常用、最稳妥的顺序给你说明,并附带具体命令示例。
psql --version
或
rpm -qa | grep postgresql
systemctl stop postgresql
默认一般是:
/var/lib/pgsql/<版本>/data
例如:
/var/lib/pgsql/13/data
pg_dump -U postgres -h localhost 数据库名 > db.sql
导出所有库:
pg_dumpall -U postgres > all.sql
scp db.sql root@新服务器IP:/root/
psql -U postgres -f db.sql
✅ 优点:安全、兼容性好
❌ 缺点:大库较慢
systemctl stop postgresql
cp -a /var/lib/pgsql/13/data /data/pgdata_backup
systemctl stop postgresql
rm -rf /var/lib/pgsql/13/data
cp -a /data/pgdata_backup /var/lib/pgsql/13/data
chown -R postgres:postgres /var/lib/pgsql/13/data
systemctl start postgresql
⚠ 注意
setenforce 0 测试)pg_basebackup -h 老IP -U repl -D /var/lib/pgsql/13/data -P -X stream
PostgreSQL 数据目录必须属于 postgres
chown -R postgres:postgres /var/lib/pgsql
getenforce
如为 Enforcing,可:
setenforce 0
或修改:
semanage fcontext -a -e /var/lib/pgsql /new/path
restorecon -Rv /new/path
迁移后检查:
postgresql.conf
pg_hba.conf
| 场景 | 推荐方式 |
|---|---|
| 跨版本 | pg_dump |
| 同版本整机 | 拷贝 data |
| 主从/备份 | pg_basebackup |
如果你能告诉我:
我可以给你更精确的迁移方案。