如何利用pgAdmin进行Linux数据库备份计划
导读:在 Linux 上,pgAdmin 的备份计划通常通过“图形化备份 + Cron 定时执行脚本”的组合来实现。下面给出可直接落地的步骤与模板,覆盖单机、容器与全库场景,并配套日志、保留与告警。 一、方案总览与前置准备 工具与方式 逻辑备...
在 Linux 上,pgAdmin 的备份计划通常通过“图形化备份 + Cron 定时执行脚本”的组合来实现。下面给出可直接落地的步骤与模板,覆盖单机、容器与全库场景,并配套日志、保留与告警。
一、方案总览与前置准备
- 工具与方式
- 逻辑备份:使用 pg_dump / pg_dumpall,适合按库/全库备份与灵活恢复。
- 物理备份:使用 pg_basebackup,适合时间点恢复与整实例迁移。
- 备份格式选择
- Custom(.dump):压缩与恢复灵活,支持并行恢复,推荐日常使用。
- Tar:跨平台迁移友好。
- Plain(.sql):便于版本控制与审查。
- Directory:适合超大数据,支持并行处理。
- 前置检查
- 确认 PostgreSQL 主机、端口、数据库名、用户名 与访问方式(本地套接字或 TCP)。
- 规划 备份目录(如 /backups)与 日志目录(如 /var/log),并确保运行备份任务的系统用户对相关目录有读写权限。
- 如走密码认证,准备 ~/.pgpass 或使用环境变量 PGPASSWORD(注意权限与安全性)。
二、方案一 脚本化备份 + Cron(推荐)
- 步骤 1 准备配置与脚本
- 创建环境配置(示例:/data/backup_config.env)
DB_HOST=localhost DB_PORT=5432 DB_USER=postgres DB_NAME=mydb BACKUP_DIR=/backups RETENTION_DAYS=7 LOG_FILE=/var/log/pg_backup.log - 创建备份脚本(示例:/usr/local/bin/pg_backup.sh)
#!/bin/bash set -Eeuo pipefail source /data/backup_config.env TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="${ BACKUP_DIR} /${ DB_NAME} _${ TIMESTAMP} .dump" mkdir -p "$BACKUP_DIR" export PGPASSWORD="${ PGPASSWORD:-} " pg_dump --host="$DB_HOST" --port="$DB_PORT" --username="$DB_USER" \ --format=c --blobs --verbose --file="$BACKUP_FILE" "$DB_NAME" echo "[$(date)] Backup completed: $BACKUP_FILE (size=$(stat -c%s "$BACKUP_FILE"))" > > "$LOG_FILE" # 保留策略 find "$BACKUP_DIR" -name "${ DB_NAME} _*.dump" -mtime +$RETENTION_DAYS -delete - 赋权
chmod +x /usr/local/bin/pg_backup.sh
- 创建环境配置(示例:/data/backup_config.env)
- 步骤 2 配置 Cron 定时
- 编辑当前用户的计划任务
crontab -e - 示例:每天 02:00 执行并将输出追加到日志
0 2 * * * /usr/local/bin/pg_backup.sh > > /var/log/pg_cron.log 2> & 1
- 编辑当前用户的计划任务
- 说明
- 如需备份全库(所有数据库),可用 pg_dumpall 替代 pg_dump,并相应调整脚本与保留策略。
三、方案二 在 pgAdmin 图形界面中生成命令并脚本化
- 在 pgAdmin 左侧选择数据库 → 右键 Backup… → 选择格式(如 Custom)、输出路径、勾选需要的选项(如包含大对象) → 点击 Backup 后在 Processes 标签页查看完整命令行参数(如 pg_dump --host=localhost --port=5432 --username=postgres --format=c --blobs --verbose --file=…)。
- 将该命令抽取为脚本(如上节),再用 Cron 定时执行,即可把“图形化一次备份”转化为“可重复的自动化任务”。
四、容器与特殊环境
- Docker 场景
- 方式 A(推荐):在宿主机定时执行脚本,通过 docker exec 调用容器内 pg_dump
- 宿主机脚本(示例:/usr/local/bin/pg_back.sh)
#!/usr/bin/env bash set -Eeuo pipefail LOG=/var/log/pg_backup_docker.log TS=$(date +%F_%H-%M-%S) BACKUP_DIR=/backups mkdir -p "$BACKUP_DIR" echo "[$(date)] Start backup" > > "$LOG" docker exec pgadmin4 /bin/sh -c ' export PGPASSWORD=postgres /usr/local/pgsql-16/pg_dump --host 127.0.0.1 --port 5432 \ --username postgres --format=c --blobs --verbose \ --file "/var/lib/pgadmin/storage/pga_user_example.com/backup/db_'"$TS"'.backup" postgres ' > > "$LOG" 2> & 1 echo "[$(date)] Done" > > "$LOG" - Cron
0 2 * * * /usr/local/bin/pg_back.sh
- 宿主机脚本(示例:/usr/local/bin/pg_back.sh)
- 方式 B:把脚本放入 pgAdmin 容器内,宿主机 Cron 仅负责触发容器内脚本。
- 方式 A(推荐):在宿主机定时执行脚本,通过 docker exec 调用容器内 pg_dump
- 安全建议
- 避免在脚本中硬编码密码,优先使用 ~/.pgpass 或受控的 环境变量文件;若使用 PGPASSWORD,确保文件权限为 600 且仅对必要用户可读。
五、恢复、校验与运维要点
- 恢复
- Custom 格式:先创建空库(如 createdb),再用 pg_restore 恢复
createdb -h localhost -p 5432 -U postgres mydb_restored pg_restore -h localhost -p 5432 -U postgres -d mydb_restored mydb_20250101.dump - 物理备份:将备份目录作为数据目录启动新实例,或使用 pg_basebackup 配套流程进行恢复。
- Custom 格式:先创建空库(如 createdb),再用 pg_restore 恢复
- 校验与监控
- 定期做恢复演练(如每周一次在测试库恢复并校验关键表行数/校验和)。
- 监控 备份文件大小变化、执行耗时、日志中的 ERROR;脚本中可加入失败告警(如 mail 或企业微信/钉钉机器人)。
- 保留与存储
- 结合业务 RPO/RTO 设置 RETENTION_DAYS(如 7 天),并执行定期清理。
- 重要备份建议同步到 离线或云端存储,提升容灾能力。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何利用pgAdmin进行Linux数据库备份计划
本文地址: https://pptw.com/jishu/770583.html
