在 CentOS 上迁移 PostgreSQL,常见场景有:同版本迁移、跨版本升级迁移、迁移到新服务器。下面按最常用、最稳妥的方式给你讲。
psql --version
rpm -qa | grep postgresql
查看数据目录(通常如下):
cat /var/lib/pgsql/<版本>/data/postgresql.conf | grep data_directory
或直接:
ls /var/lib/pgsql/
pg_dumpall -U postgres > /backup/pg_full.sql
或单库:
pg_dump -U postgres dbname > dbname.sql
适用于:换磁盘 / 改数据目录
systemctl stop postgresql
mv /var/lib/pgsql/13/data /new/path/data
vi /usr/lib/systemd/system/postgresql-13.service
修改:
Environment=PGDATA=/new/path/data
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
⚠️ 不能直接拷贝 data 目录
pg_dumpall -U postgres > all.sql
# 新版本初始化后导入
psql -U postgres < all.sql
/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
chown -R postgres:postgres /new/data/path
检查:
vi data/pg_hba.conf
vi data/postgresql.conf
setenforce 0
# 或
semanage fcontext -a -e /var/lib/pgsql /new/path
restorecon -Rv /new/path
| 场景 | 推荐方式 |
|---|---|
| 换目录 | 停服 + 移动 data |
| 换服务器 | pg_dumpall |
| 升级版本 | pg_dump / pg_upgrade |
| 大数据量 | 物理备份 + rsync |
如果你能告诉我:
我可以给你更精确的迁移方案。