#postgres数据备份shell脚本 #!/bin/bash folder=/home/data/backup/pgdatabackup; if [ ! -d folder ];then mkdir -p "$folder"; fi cd $folder; day=`date +%Y%m%d`; FILENAME_BEFORE=export_bak_; FILENAME=$FILENAME_BEFORE$day.dmp; mkdir -p "$day"; #cd $day #host=127.0.0.1 #port=5432 user=XXX; #password=XXXX db=apidbs; backDay=1; --获取容器名称 container=$(docker ps | grep 容器名称 | sed -n 1p | awk '{print $1}'); echo $container'开始postgres备份'; #docker exec -i $container /bin/bash -c 'PASSWORD='$password' /usr/lib/postgresql/15/bin/pg_dump -Fc -p '$port' -U '$user' -d '$db'>/var/lib/postgresql/data/'$FILENAME'' --进入docker容器并导出数据库备份文件 docker exec -i $container /bin/bash -c 'pg_dumpall -U '$user' > /var/lib/postgresql/data/'$FILENAME''; --从docker容器复制脚本到指定目录 docker cp $container:/var/lib/postgresql/data/$FILENAME $folder/$day/$FILENAME; --docker删除脚本文件 docker exec -i $container /bin/bash -c 'rm -rf /var/lib/postgresql/data/'$FILENAME''; echo $container'结束postgres备份'; echo "删除"$backDay "天前的 数据库备份文件!开始"; --查询获取n天前的备份文件并删除 for filePath in `find $folder -name $FILENAME_BEFORE"*" -mtime $backDay `; do # 上级目录 upperLevelDir=$(dirname $filePath); if [ -d $upperLevelDir ];then echo "上级目录"$upperLevelDir; rm -rf $upperLevelDir; echo $backDay "天前的数据库备份文件删除完毕!"; fi; done; echo "删除"$backDay "天前的 数据库备份文件!结束";