主题
一、环境准备
1、docker环境安装(略)
2、使用docker镜像中的pg_dump命令,所以需要下载postgres:15镜像(略);
二、备份脚本
1、编写备份脚本backup_postgres.sh
bash
#!/bin/bash
# backup_postgres.sh
# 配置参数
BACKUP_DIR="/home/backup/postgres"
DB_NAME='srebro_gis_uat'
DB_USER="postgres"
RETENTION_DAYS=7 # 保留7天
BACKUP_LOGS="postgres.log"
# 生成备份文件名(包含时间戳)
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_backup_${TIMESTAMP}.sql"
echo "------------start---------$(date +"%Y%m%d_%H%M%S")--------start------------" >> $BACKUP_DIR/$BACKUP_LOGS
# 执行备份(使用docker内部pg_dump命令和直接使用pg参数值)
docker run --rm -e PGPASSWORD=psssword postgres:15 pg_dump -h 10.*.*.* -U db_user -d db_name > $BACKUP_FILE
#切换备份目录
cd $BACKUP_DIR
#zip执行压缩
zip ${DB_NAME}_backup_${TIMESTAMP}.zip ${DB_NAME}_backup_${TIMESTAMP}.sql
#判断备份成功后,执行删除sql文件
if [ $? -eq 0 ]; then
echo “${DB_NAME}_backup_${TIMESTAMP}.zip 压缩成功” >> $BACKUP_DIR/$BACKUP_LOGS
rm ${DB_NAME}_backup_${TIMESTAMP}.sql
echo “${DB_NAME}_backup_${TIMESTAMP}.sql 删除成功” >> $BACKUP_DIR/$BACKUP_LOGS
else
echo “${DB_NAME}_backup_${TIMESTAMP}.zip 压缩失败” >> $BACKUP_DIR/$BACKUP_LOGS
fi
# 删除旧备份文件(保留指定天数)
find $BACKUP_DIR -name "${DB_NAME}_backup_*.zip" -type f -mtime +$RETENTION_DAYS -delete
echo "--------------end---------$(date +"%Y%m%d_%H%M%S")-----------end------------" >> $BACKUP_DIR/$BACKUP_LOGS2、添加执行权限
chmod +x backup_postgres.sh
三**、添加计划任务**
bash
vim /etc/crontab
10 23 * * * root /home/backup/backup_postgres.sh