在设置自动备份前,需完成以下基础配置:
pg_dump是PostgreSQL自带的逻辑备份工具,需确保其已安装(通常随PostgreSQL一起安装)。可通过pg_dump --version验证。~/.pgpass文件,内容格式为hostname:port:database:username:password(如localhost:5432:*:postgres:yourpassword),并设置权限为600(chmod 600 ~/.pgpass)。/pgbackup/),并确保当前用户有写入权限。这是最常用且灵活的方式,适用于大多数Linux发行版(如Ubuntu、Debian、CentOS)。
新建一个Shell脚本(如/deploy/pg_backup.sh),内容如下:
#!/bin/bash
# 设置环境变量(避免密码明文)
export PGPASSWORD="your_postgres_password"
# 获取当前日期(用于生成唯一文件名)
NOW=$(date +"%Y%m%d_%H%M%S")
# 执行备份(以postgres数据库为例,可根据需求修改)
pg_dump -h localhost -U postgres -F c -b -v -f "/pgbackup/postgres_backup_$NOW.backup"
说明:
-F c:指定备份格式为自定义格式(支持压缩和增量备份);-b:包含大对象(如图片、二进制数据);-v:显示详细输出(可选)。chmod +x /deploy/pg_backup.sh
运行crontab -e,添加以下内容(每天凌晨2点执行):
0 2 * * * /deploy/pg_backup.sh >> /pgbackup/pg_backup.log 2>&1
说明:
0 2 * * *:表示每天凌晨2点执行;>> /pgbackup/pg_backup.log 2>&1:将脚本输出(包括错误信息)追加到日志文件中,便于后续排查问题。pgAgent是pgAdmin的扩展组件,专门用于管理PostgreSQL定时任务,适合需要与pgAdmin深度集成的场景。
以Ubuntu为例,运行以下命令:
sudo apt install pgagent
Backup Database;Command;pg_dump -h localhost -U postgres -F c -f /pgbackup/postgres_backup_$(date +\%Y\%m\%d).backup postgres(注意:%需转义为\%);Daily at 2 AM;02:00:00;若pgAdmin和PostgreSQL均运行在Docker容器中,需在容器内执行备份命令,并通过宿主机crontab触发。
进入pgAdmin容器(假设容器名为pgadmin4):
docker exec -it pgadmin4 /bin/bash
在容器内创建脚本(如/var/lib/pgadmin/back.sh):
#!/bin/bash
# 设置环境变量
export PGPASSWORD="your_postgres_password"
# 获取当前日期
NOW=$(date +"%Y-%m-%d_%H-%M")
# 执行备份(假设PostgreSQL容器名为`postgres`)
docker exec postgres pg_dump -h postgres -U postgres -F c -f /var/lib/pgadmin/storage/pga_user_xxx/backup/database_$NOW.backup postgres
赋予执行权限:
chmod +x /var/lib/pgadmin/back.sh
在宿主机上创建/usr/local/bin/pg_back.sh:
#!/bin/bash
echo "$(date) -- 开始备份" >> /usr/local/logs/pg_back.log
docker exec pgadmin4 /bin/bash -c "/var/lib/pgadmin/back.sh >> /var/lib/pgadmin/logs/pg_back.log 2>&1"
echo "$(date) -- 备份完成" >> /usr/local/logs/pg_back.log
赋予执行权限:
chmod +x /usr/local/bin/pg_back.sh
运行crontab -e,添加以下内容(每天凌晨2点执行):
0 2 * * * /usr/local/bin/pg_back.sh
注意:需确保宿主机能访问pgAdmin容器的存储路径(如/var/lib/pgadmin/storage/),必要时通过-v参数挂载卷。
chown -R 999:999 /pgbackup/,999是pgAdmin默认用户ID);/pgbackup/pg_backup.log),及时发现异常;pg_basebackup或第三方工具(如Barman)实现增量备份,减少存储占用。