温馨提示×

centos怎样迁移postgresql

小樊
42
2026-09-06 12:18:53
栏目: 云计算

在 CentOS 上迁移 PostgreSQL,常见场景有:同版本迁移、跨版本升级迁移、迁移到新服务器。下面按最常用、最稳妥的方式给你讲。


一、迁移前准备

1. 确认版本和数据目录

psql --version
rpm -qa | grep postgresql

查看数据目录(通常如下):

cat /var/lib/pgsql/<版本>/data/postgresql.conf | grep data_directory

或直接:

ls /var/lib/pgsql/

2. 备份(非常重要)

pg_dumpall -U postgres > /backup/pg_full.sql

或单库:

pg_dump -U postgres dbname > dbname.sql

二、同服务器版本迁移(数据目录搬迁)

适用于:换磁盘 / 改数据目录

1. 停止 PostgreSQL

systemctl stop postgresql

2. 移动数据目录

mv /var/lib/pgsql/13/data /new/path/data

3. 修改 systemd 配置

vi /usr/lib/systemd/system/postgresql-13.service

修改:

Environment=PGDATA=/new/path/data

4. 重新加载并启动

systemctl daemon-reload
systemctl start postgresql

三、跨服务器迁移(最推荐)

源服务器

pg_dumpall -U postgres | gzip > pg.sql.gz
scp pg.sql.gz user@new_server:/tmp/

目标服务器

yum install -y postgresql-server
postgresql-setup initdb
systemctl start postgresql

导入数据:

gunzip -c /tmp/pg.sql.gz | psql -U postgres

四、跨大版本升级(如 9.6 → 13)

⚠️ 不能直接拷贝 data 目录

方法 1:pg_dump + 导入(最安全)

pg_dumpall -U postgres > all.sql
# 新版本初始化后导入
psql -U postgres < all.sql

方法 2:pg_upgrade(少停机)

/usr/pgsql-13/bin/pg_upgrade \
  --old-datadir=/var/lib/pgsql/9.6/data \
  --new-datadir=/var/lib/pgsql/13/data \
  --old-bindir=/usr/pgsql-9.6/bin \
  --new-bindir=/usr/pgsql-13/bin

五、常见问题

1. 权限错误

chown -R postgres:postgres /new/data/path

2. 连接不上

检查:

vi data/pg_hba.conf
vi data/postgresql.conf

3. SELinux

setenforce 0
# 或
semanage fcontext -a -e /var/lib/pgsql /new/path
restorecon -Rv /new/path

六、推荐做法总结

场景 推荐方式
换目录 停服 + 移动 data
换服务器 pg_dumpall
升级版本 pg_dump / pg_upgrade
大数据量 物理备份 + rsync

如果你能告诉我:

  • PostgreSQL 版本
  • 是否换服务器
  • 数据量大小

我可以给你更精确的迁移方案

0