Skip to content

一、环境准备

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_LOGS

2、添加执行权限

chmod +x backup_postgres.sh

三**、添加计划任务**

bash
vim /etc/crontab
10 23 * * *  root /home/backup/backup_postgres.sh
最近更新