在 CentOS 上迁移 PostgreSQL,通常有以下几种常见场景。我先给你整体思路,再给具体可操作步骤。
| 场景 | 推荐方式 |
|---|---|
| 同版本、同架构、整机迁移 | 物理文件拷贝(最快) |
| 跨版本升级 | pg_dump / pg_dumpall |
| 跨服务器但版本一致 | pg_dump + psql 或 物理复制 |
| 大数据量、低停机 | 流复制 / pg_basebackup |
psql --version
rpm -qa | grep postgres
psql -c "SHOW data_directory;"
常见路径:
/var/lib/pgsql/12/data/var/lib/pgsql/13/data# 导出单个数据库
pg_dump -U postgres dbname > dbname.sql
# 导出所有数据库(含角色)
pg_dumpall -U postgres > all.sql
scp dbname.sql user@new_server:/tmp/
# 创建数据库(如需要)
createdb -U postgres dbname
# 导入
psql -U postgres dbname < /tmp/dbname.sql
systemctl stop postgresql
tar czf pgdata.tar.gz /var/lib/pgsql/12/data
scp pgdata.tar.gz user@new_server:/var/lib/pgsql/12/
systemctl stop postgresql
rm -rf /var/lib/pgsql/12/data
tar xzf pgdata.tar.gz -C /var/lib/pgsql/12/
chown -R postgres:postgres /var/lib/pgsql/12/data
systemctl start postgresql
⚠️ 注意:
pg_basebackup -h old_host -U repl -D /var/lib/pgsql/12/data -P -X stream
psql -c "\l"
psql -c "\dt"
检查:
chown -R postgres:postgres /var/lib/pgsql
setenforce 0
# 或
semanage fcontext -a -t postgresql_db_t "/var/lib/pgsql(/.*)?"
restorecon -Rv /var/lib/pgsql
如果你能告诉我:
我可以给你更精确的迁移方案。