PostgreSQL数据库Linux迁移步骤
导读: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.conf 的 data_directory,并 systemctl daemon-reload。
- 创建 postgres 用户与目录:
- 启动与验证
- 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
- 源库开启复制参数(postgresql.conf):
- 在备库初始化并启动流复制
- 使用 pg_basebackup 拉取基础备份:
- pg_basebackup -h 主库IP -U repl -D $PGDATA -P -v -R
- 启动备库后,在主库检查复制状态:
- select * from pg_stat_replication; (state 应为 streaming)
- 使用 pg_basebackup 拉取基础备份:
- 切换
- 计划维护窗口,短暂停止写入;在备库执行 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
