温馨提示×

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
  • -U:指定连接用户(需有数据库Owner权限);
  • -h/-p:源服务器地址与端口(默认5432);
  • -Fc:自定义格式(支持并行恢复);
  • -j 4:并行度(提升备份速度,根据服务器CPU核心数调整)。

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
  • -d:指定目标数据库;
  • -j 4:并行恢复(与备份时的并行度一致,提升效率)。

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. 修改目标服务器配置

  • 更新数据目录路径:编辑postgresql.conf(路径同数据目录下的postgresql.conf),修改data_directory参数:
    data_directory = '/var/lib/pgsql/data/'
    
  • 调整监听设置:若需允许远程连接,修改postgresql.conf中的listen_addresses
    listen_addresses = '*'  # 允许所有IP连接(生产环境建议指定具体IP)
    
  • 配置防火墙:开放PostgreSQL默认端口(5432),允许外部访问:
    firewall-cmd --permanent --add-service=postgresql  # CentOS
    firewall-cmd --reload
    

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工具实现增量同步,减少停机时间。

注意事项

  • 停机时间规划:逻辑备份/恢复适合长时间停机场景(如夜间维护),物理迁移适合短时间停机场景(如分钟级);若需零停机,建议使用流复制(需配置主从复制)。
  • 数据一致性保障:迁移前停止源数据库的写操作(或使用pg_start_backup/pg_stop_backup标记备份点),避免数据不一致。
  • 版本兼容性:若跨大版本迁移(如9.5→12),需先升级到中间版本(如9.5→10→11→12),逐步升级以避免兼容性问题。

0