迁移 CentOS 上的 PostgreSQL 数据 常见有几种方式,下面按最常用、最安全的顺序给你说明,并附上完整示例。你可以根据场景选择。
psql --version
或
rpm -qa | grep postgresql
sudo -u postgres psql -c "SHOW data_directory;"
常见路径:
/var/lib/pgsql/版本/data/var/lib/postgresql/版本/mainpg_dump / pg_restore(跨版本、最安全)适合:
sudo -u postgres pg_dumpall > /tmp/pg_full_backup.sql
或只备份某个库:
sudo -u postgres pg_dump dbname > /tmp/dbname.sql
scp /tmp/pg_full_backup.sql user@new_server:/tmp/
sudo -u postgres psql -f /tmp/pg_full_backup.sql
✅ 优点
❌ 缺点
适合:
systemctl stop postgresql
cp -a /var/lib/pgsql/14/data /var/lib/pgsql/14/data_bak
cp -a /var/lib/pgsql/14/data /new/path/data
chown -R postgres:postgres /new/path/data
vim /usr/lib/systemd/system/postgresql-14.service
修改:
Environment=PGDATA=/new/path/data
systemctl daemon-reload
systemctl start postgresql
✅ 优点
❌ 缺点
rsync 在线迁移(停机时间短)rsync -avz /var/lib/pgsql/14/data/ new_server:/var/lib/pgsql/14/data/
⚠️ 建议:
适合:
流程简述:
如果你需要,我可以单独给你 流复制迁移方案。
data directory has wrong ownership
✅ 解决:
chown -R postgres:postgres /var/lib/pgsql
setenforce 0
或:
semanage fcontext -a -e /var/lib/pgsql /new/path/data
restorecon -Rv /new/path/data
| 场景 | 推荐方式 |
|---|---|
| 升级 PostgreSQL | pg_dump |
| 同版本迁移 | 物理复制 |
| 跨服务器 | pg_dump / rsync |
| 生产不停机 | 流复制 |
如果你愿意,可以告诉我:
我可以给你 精确到命令级别 的迁移方案 ✅