#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 "天前的 数据库备份文件!结束";