首页主机资讯PostgreSQL Linux备份策略有哪些

PostgreSQL Linux备份策略有哪些

时间2025-12-09 00:50:03发布访客分类主机资讯浏览822
导读:PostgreSQL 在 Linux 上的备份策略总览 逻辑备份:使用 pg_dump / pg_dumpall 导出为 SQL 脚本或自定义归档,便于迁移、跨版本恢复、按表/模式选择性备份。 物理备份:使用 pg_basebackup...

PostgreSQL 在 Linux 上的备份策略总览

  • 逻辑备份:使用 pg_dump / pg_dumpall 导出为 SQL 脚本或自定义归档,便于迁移、跨版本恢复、按表/模式选择性备份。
  • 物理备份:使用 pg_basebackup 获取数据目录的一致性副本,结合 WAL 归档实现时间点恢复(PITR)。
  • 第三方工具:如 pgBackRest,提供全量/差异/增量备份、并行与加密、多存储库等能力,适合中大型与生产级场景。
  • 自动化与调度:通过 crontabsystemd timer 定时执行;配合日志轮转与监控告警保障可靠性。

策略对比与适用场景

策略 主要工具 备份粒度 恢复能力 优点 局限 典型场景
逻辑备份 pg_dump / pg_dumpall 单库 / 全集群对象 到备份时刻的一致性;不支持 PITR 跨版本迁移、选择性恢复、体积小 恢复重建索引耗时、长事务可能影响性能 开发/测试、小中型库、结构/对象级恢复
物理备份 + WAL pg_basebackup + WAL 归档 集群级一致性副本 时间点恢复(PITR) 接近崩溃一致、恢复可快进到任意时间点 需配置 WAL 归档与存储;版本升级需同主版本 生产库、要求 RPO/RTO 较高的业务
第三方增强 pgBackRest 集群级 PITR + 差异/增量 并行/压缩/加密、多仓库、增量还原 需学习配置与运维 中大型与严格 RTO/RPO 场景

常见备份策略范式

  • 范式一 逻辑备份 + 定时清理
    使用 pg_dump -F c -b -v | gzip 生成自定义格式并压缩;以 crontab 每日执行;按保留天数删除旧备份;记录日志并定期做恢复演练。适合需要跨版本迁移、按库/表恢复的场景。

  • 范式二 物理备份 + WAL 归档实现 PITR
    配置 wal_level=replica / archive_mode=on / archive_command(将 WAL 段拷贝到安全位置);用 pg_basebackup -Fp -Xs -P 获取基础备份;恢复时配置 restore_command 回放 WAL 至目标时间点。适合生产环境的高可靠恢复。

  • 范式三 第三方工具编排全量/差异/增量
    pgBackRest 统一管理备份库与存储库,制定“每周全量 + 每日差异/增量”策略,结合 WAL 归档实现快速 PITR 与多副本存储。适合中大型与严格 RTO/RPO 要求。


自动化与运维要点

  • 权限最小化:备份账号仅授予必要权限,避免使用超级账号进行日常备份。
  • 多副本与异地存储:本地 NAS/磁盘 + 云对象存储(如 OSS/COS)或异地服务器,降低单点故障风险。
  • 加密与压缩:对备份文件进行 gpg 加密与压缩,兼顾安全与成本。
  • 日志与监控:记录备份日志,使用 logrotate 管理;配置监控告警,及时发现失败任务。
  • 定期恢复测试:至少每月在测试环境演练恢复,验证可用性与完整性。
  • 调度方式:优先使用 postgres 系统用户执行;可用 crontabsystemd timer 实现定时任务。

快速上手示例

  • 逻辑备份脚本(单库,自定义格式 + 压缩 + 保留 30 天)

    #!/bin/bash
    BACKUP_DIR="/data/pg_backup"
    DB_NAME="your_db"
    DB_USER="postgres"
    BACKUP_FILE="${
    BACKUP_DIR}
    /${
    DB_NAME}
        _$(date +%Y%m%d_%H%M%S).sql.gz"
    RETENTION_DAYS=30
    
    mkdir -p "$BACKUP_DIR"
    pg_dump -U "$DB_USER" -d "$DB_NAME" -F c -b -v | gzip >
         "$BACKUP_FILE"
    if [ $? -eq 0 ];
         then
      echo "$(date +%F_%T) 备份成功:$BACKUP_FILE" >
        >
         "$BACKUP_DIR/backup.log"
    else
      echo "$(date +%F_%T) 备份失败" >
        >
     "$BACKUP_DIR/backup.log"
      exit 1
    fi
    find "$BACKUP_DIR" -name "${
    DB_NAME}
    _*.sql.gz" -mtime +${
    RETENTION_DAYS}
         -delete
    

    定时任务(切换到 postgres 用户):0 3 * * * /path/to/pg_backup.sh

  • 物理备份 + WAL 归档(PITR 基础)

    1. 配置 postgresql.conf
    wal_level = replica
    archive_mode = on
    archive_command = 'cp %p /var/lib/pgsql/archive/%f'
    
    1. 获取基础备份
    pg_basebackup -D /var/lib/pgsql/15/basebackup -Fp -Xs -P
    
    1. 恢复(示例)
    # 准备恢复目录
    rm -rf /var/lib/pgsql/15/data/*
    tar xf /var/lib/pgsql/15/basebackup/base.tar.gz -C /var/lib/pgsql/15/data
    mkdir -p /var/lib/pgsql/15/data/pg_wal
    tar xf /var/lib/pgsql/15/basebackup/pg_wal.tar.gz -C /var/lib/pgsql/15/data/pg_wal
    
    # 配置回放 WAL
    echo "restore_command = 'cp /var/lib/pgsql/15/archive/%f %p'" \
      >
        >
         /var/lib/pgsql/15/data/postgresql.conf
    
    # 启动到恢复模式
    touch /var/lib/pgsql/15/data/recovery.signal
    systemctl start postgresql-15
    

    恢复将自动回放 WAL 至完成点(可按需设置目标时间/事务)。

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


若转载请注明出处: PostgreSQL Linux备份策略有哪些
本文地址: https://pptw.com/jishu/766560.html
PostgreSQL Linux版本如何选择 Linux MongoDB配置中如何设置副本集

游客 回复需填写必要信息