linux

PostgreSQL在Linux上如何迁移

小樊
50
2025-11-02 14:35:03
栏目: 云计算

PostgreSQL在Linux上的迁移流程及注意事项

一、迁移前准备

  1. 版本兼容性检查:确保源服务器与目标服务器的PostgreSQL版本一致或兼容(如9.5及以上版本支持跨小版本迁移),避免因版本差异导致功能异常。
  2. 备份策略制定:根据数据量选择逻辑备份(pg_dump/pg_restore)或物理备份(数据目录复制),优先推荐逻辑备份(支持跨版本、跨平台);同时备份配置文件(postgresql.confpg_hba.conf),防止配置丢失。
  3. 环境检查:确认目标服务器已安装与源服务器相同版本的PostgreSQL(可通过rpm -qa | grep postgresqldpkg -l | grep postgresql查看),并安装必要依赖(如libreadline等,避免启动报错)。

二、逻辑备份与恢复(官方推荐,适用于大多数场景)

1. 备份源数据库

使用pg_dump工具生成逻辑备份文件(支持压缩,减少传输时间):

pg_dump -U postgres -h 源服务器IP -p 5432 数据库名 -Fc -j 4 > 数据库名.dump

2. 传输备份文件

使用scprsync将备份文件传输到目标服务器(加密传输,避免数据泄露):

scp 数据库名.dump postgres@目标服务器IP:/home/postgres/备份目录/

3. 恢复数据库

在目标服务器上,使用pg_restore工具恢复数据(需指定目标数据库,若数据库不存在需先创建):

# 创建目标数据库(可选)
createdb -U postgres 目标数据库名

# 恢复数据(并行加速)
pg_restore -U postgres -h localhost -p 5432 -d 目标数据库名 -j 4 数据库名.dump

4. 验证数据完整性

登录目标数据库,执行关键查询(如表记录数、数据一致性校验),确保数据无丢失或损坏:

psql -U postgres -d 目标数据库名 -c "SELECT COUNT(*) FROM 关键表;"

三、物理迁移(数据目录复制,适用于快速迁移)

1. 停止源服务器PostgreSQL服务

systemctl stop postgresql  # CentOS/RHEL
# 或 systemctl stop postgresql@版本号-main  # Debian/Ubuntu

2. 复制数据目录

将源服务器的PostgreSQL数据目录(默认路径:/var/lib/pgsql/data//var/lib/postgresql/版本号/main/)复制到目标服务器(保留目录结构与权限):

rsync -avz /var/lib/pgsql/data/ postgres@目标服务器IP:/var/lib/pgsql/data/

3. 修改目标服务器配置

4. 启动目标服务器服务

systemctl start postgresql
systemctl enable postgresql  # 设置开机自启

5. 验证服务状态

psql -U postgres -d postgres -c "SELECT version();"  # 登录数据库,检查版本
systemctl status postgresql  # 检查服务运行状态

四、迁移后检查与优化

  1. 权限一致性:核对源服务器与目标服务器的用户、角色权限(如GRANT语句),确保访问控制一致。
  2. 配置文件核对:对比源服务器与目标服务器的postgresql.conf(如shared_bufferswork_mem)、pg_hba.conf(如认证方式),确保配置符合目标环境需求。
  3. 性能优化:根据目标服务器硬件资源(如内存、CPU),调整postgresql.conf中的性能参数(如shared_buffers设置为内存的25%、maintenance_work_mem设置为1GB以上),提升数据库性能。
  4. 增量同步(可选):若迁移期间源数据库有数据变更,可使用pglogical扩展或pg_basebackup工具实现增量同步,减少停机时间。

注意事项

0
看了该问题的人还看了