温馨提示×

Debian上PostgreSQL数据库迁移步骤

小樊
37
2025-12-30 21:27:18
栏目: 云计算

Debian 上 PostgreSQL 数据库迁移步骤

一 迁移方式选型

  • 逻辑迁移:使用 pg_dump/pg_restore(单库或按模式)、或 pg_dumpall(全库与角色)。优点是兼容性强、跨版本/跨平台方便;缺点是停机时间与数据量成正比。适合大多数迁移与升级场景。
  • 物理迁移:使用 pg_basebackup 做全量基础备份,或用 WAL 流复制做在线近零停机迁移。优点是速度快、一致性好;缺点是要求 PostgreSQL 主版本一致、配置更复杂。适合大库与高可用需求。

二 逻辑迁移步骤(pg_dump/pg_restore,单库或按模式)

  • 准备
    • 确认源库版本与目标库版本;跨小版本通常兼容,跨大版本优先用逻辑迁移或 pg_upgrade
    • 在目标库创建空库(与源库同名或按规划命名),并确保角色/用户已存在。
  • 备份
    • 单库自定义格式(含大对象,适合大库):
      pg_dump -U username -h source_host -p source_port -d dbname -F c -b -v -f backup.dump
  • 传输
    • scp backup.dump target_user@target_host:/path/to/backup/
  • 恢复
    • 连接到目标库后恢复:
      pg_restore -U username -h target_host -p target_port -d dbname -v backup.dump
    • 如需先清空目标再导入,可加 -c;需要并行加速可加 -j N
  • 验证
    • 校验对象数量、关键表行数、约束与索引、应用连接与业务功能。

三 全库与角色迁移(pg_dumpall)

  • 备份
    • 导出全库与角色:
      sudo -u postgres pg_dumpall -U username -f backup_all.sql
  • 传输
    • scp backup_all.sql target_user@target_host:/path/to/backup/
  • 恢复
    • 在目标库初始化完成后执行:
      sudo -u postgres psql -U username -f backup_all.sql
  • 说明
    • 适合一次性迁移所有数据库与全局对象;若目标库已存在同名对象,需评估冲突与清理策略。

四 物理迁移与近零停机方案

  • 使用 pg_basebackup 的全量物理迁移
    • 在目标端准备数据目录并停止实例,使用复制用户从源库拉取基础备份:
      pg_basebackup -U replication_user -h source_host -p source_port -D /var/lib/postgresql/15/main -Fp -Xs -P
    • 如有需要,调整 postgresql.conf/pg_hba.conf,然后启动目标实例。
  • 使用 WAL 流复制的在线迁移(最小停机)
    • 源库启用复制:
      wal_level = replica
      max_wal_senders = 10
      wal_keep_segments = 64(或按环境调大)
      重启源库后创建复制用户并授予权限。
    • 目标库作为备库启动并接入源库,待追平后执行切换(如通过 pg_rewind 或计划内主备切换),实现近零停机迁移。
  • 适用与注意
    • 物理方式要求源/目标 主版本一致、平台与库簇参数兼容;WAL 归档与网络带宽需提前评估。

五 版本升级与大版本迁移

  • 小版本升级(如 14.5 → 14.7
    • 通过 APT 更新对应主版本包并重启服务:
      sudo apt update && sudo apt upgrade postgresql-14
      sudo systemctl restart postgresql
  • 大版本升级(如 14.x → 15.x
    • 安装新版本,初始化新数据目录,使用 pg_upgrade 执行检查与升级:
      sudo -u postgres /usr/lib/postgresql/15/bin/pg_upgrade
      -b /usr/lib/postgresql/14/bin -B /usr/lib/postgresql/15/bin
      -d /var/lib/postgresql/14/main -D /var/lib/postgresql/15/main --check

      检查通过后执行实际升级,再运行 vacuumdb --all --analyze-in-stages

    • 若兼容性受限,可改用逻辑迁移(pg_dumpall/pg_dump)。

六 迁移前后关键检查清单

  • 版本与兼容性:确认源/目标 PostgreSQL 主版本与扩展兼容性;跨大版本优先逻辑迁移或 pg_upgrade
  • 配置与网络:迁移 postgresql.conf/pg_hba.conf;开放必要端口(默认 5432),确保应用与复制网络可达。
  • 一致性校验:对比关键表行数、约束、索引、序列值与应用侧校验;必要时抽样查询验证。
  • 权限与角色:确保 角色/用户与权限一致;如使用 pg_dumpall,包含角色定义一并迁移。
  • 性能与维护:导入后执行 ANALYZE 更新统计信息;按需调整 shared_buffers/work_mem 等参数。
  • 回滚预案:保留旧库与备份一段时间;切换前在测试环境演练;准备回滚脚本与时间点。

0