首页主机资讯PostgreSQL数据库Linux迁移步骤

PostgreSQL数据库Linux迁移步骤

时间2025-11-17 16:26:03发布访客分类主机资讯浏览992
导读:Linux 下 PostgreSQL 迁移步骤 一 迁移方式总览与选择 逻辑迁移:使用 pg_dump/pg_restore 导出导入,适合跨版本、跨平台、目录变更、精简迁移;停机时间取决于数据量与导入速度。 物理迁移:直接拷贝 PGDA...

Linux 下 PostgreSQL 迁移步骤

一 迁移方式总览与选择

  • 逻辑迁移:使用 pg_dump/pg_restore 导出导入,适合跨版本、跨平台、目录变更、精简迁移;停机时间取决于数据量与导入速度。
  • 物理迁移:直接拷贝 PGDATA 数据目录,要求 PostgreSQL 主版本一致、平台与库文件布局兼容;停机短,但要求严格一致性与正确的权限/路径配置。
  • 零停机方案:搭建 流复制(Streaming Replication) 备库,切换后成为主库,适合高可用与最小停机场景。

二 方案一 逻辑迁移步骤(pg_dump/pg_restore)

  • 准备
    • 确认目标库版本与源库兼容;安装客户端工具(pg_dump、pg_restore)。
    • 规划目标库名、用户、端口与表空间路径(如需保持与源库一致,提前创建)。
  • 导出
    • 单库导出为自定义归档(便于并行恢复与选择性恢复):
      • pg_dump -U postgres -h 源主机 -p 5432 -F c -f dbname.dump dbname
    • 全实例导出(含角色/表空间,不含数据):
      • pg_dumpall -U postgres --globals-only -f globals.sql
  • 传输
    • 使用 scp/rsync 将 dump 文件与 globals.sql 传到目标服务器。
  • 在目标端创建库与对象
    • 创建目标库(与源库同名或映射):createdb -U postgres dbname
    • 如源库使用非默认表空间,先在目标端创建表空间目录并赋权:
      • mkdir -p /data/tbs;chown postgres:postgres /data/tbs
      • psql -U postgres -c “CREATE TABLESPACE tbs LOCATION ‘/data/tbs’; ”
  • 导入
    • 自定义归档(推荐并行):
      • pg_restore -U postgres -d dbname -j 4 dbname.dump
    • 纯文本 SQL 导出:
      • psql -U postgres -d dbname -f dbname.sql
    • 导入全局对象:psql -U postgres -f globals.sql
  • 校验
    • 校验对象数量、数据量、关键业务查询与约束;对比 pg_stat_database、表行数抽样。

三 方案二 物理迁移步骤(拷贝 PGDATA)

  • 准备
    • 确认源/目标 PostgreSQL 主版本一致(如均为 14.x),操作系统与库依赖一致;记录源端 PGDATA 路径(如 /var/lib/pgsql/14/data/data/pgsql/data)。
  • 停源库
    • 快速停止以避免不一致:pg_ctl -D $PGDATA stop -m fast 或 systemctl stop postgresql。
  • 拷贝数据
    • 保持权限与属性:rsync -aAX --info=progress2 $PGDATA/ 目标主机:$PGDATA/
  • 目标端准备
    • 创建 postgres 用户与目录:
      • useradd -m -U postgres;chown postgres:postgres $PGDATA;chmod 700 $PGDATA
    • 如目录变更,修改服务文件中的 Environment=PGDATA=新路径postgresql.confdata_directory,并 systemctl daemon-reload。
  • 启动与验证
    • systemctl start postgresql;psql -U postgres -c “SELECT version(); ” 与 \l 检查库可用性。

四 方案三 零停机迁移步骤(流复制)

  • 前置
    • 源库开启复制参数(postgresql.conf):
      • wal_level = replica;max_wal_senders = 5;wal_keep_segments = 32(或启用 WAL 归档)
    • 创建复制用户:
      • createuser -U postgres --replication repl
    • 配置 pg_hba.conf 允许复制连接(从备库 IP):
      • host replication repl 备库IP/32 md5
  • 在备库初始化并启动流复制
    • 使用 pg_basebackup 拉取基础备份:
      • pg_basebackup -h 主库IP -U repl -D $PGDATA -P -v -R
    • 启动备库后,在主库检查复制状态:
      • select * from pg_stat_replication; (state 应为 streaming
  • 切换
    • 计划维护窗口,短暂停止写入;在备库执行 pg_promote() 提升为主库;将应用连接切换到新主库;旧主库修复后可作为新备库回切。

五 关键注意事项与常见问题

  • 版本与兼容性
    • 逻辑迁移可跨小版本;物理迁移要求主版本一致;跨大版本优先考虑逻辑迁移或升级后再迁移。
  • 停机窗口与性能
    • 逻辑迁移停机≈导出+导入时间,可用并行(-j)与压缩提升速度;物理迁移停机≈停库+切换时间。
  • 权限与目录
    • 确保 postgres:postgres 属主与 700 权限;PGDATA 路径变更需同步修改服务文件或 postgresql.conf
  • 表空间与路径
    • 目标端需预先创建同名表空间目录并赋权,否则导入会失败。
  • 网络与防火墙
    • 开放 5432 端口(或自定义端口),确保复制/导入链路可达。
  • 常见问题速解
    • 启动失败且报库缺失:物理迁移后检查 LD_LIBRARY_PATH 与依赖库(如 libreadline.so)是否就位。
    • 端口冲突:目标端已有实例在 5432 时,临时改用 5433 启动旧版本验证,再切换。
    • 复制延迟:检查网络、WAL 生成速度与磁盘 I/O,必要时增加 WAL 保留或启用归档。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: PostgreSQL数据库Linux迁移步骤
本文地址: https://pptw.com/jishu/749058.html
PostgreSQL与Linux兼容性问题 Linux系统如何备份PostgreSQL

游客 回复需填写必要信息