postgresql全库自动备份shell脚本
脚本功能说明:
将某台postgresql数据库服务器下所有业务数据库备份至指定目录
使用说明:
将以下脚本中备份目录、数据库IP地址、用户名、端口、密码修改为自己的postgresql服务器配置值,其它不用改。然后在postgresql服务器创建一个空文本pg_auto_bak.sh,将修改后的代码复制粘贴至文本并保存。
#!/bin/sh
# 当前日期
today=$(date "+%Y%m%d%H%M")
# 当前3天前日期
three_days_before=$(date -d "3 days ago" +%Y%m%d%H%M)
# 打印日志
echo '开始备份数据库,时间:'$today
#备份目录
bakupdir=/home/pgDataBak/
cd $bakupdir
# 创建文件夹
mkdir $today
cd $today
# 数据库IP地址、端口
db_host=192.168.120.25
db_port=5432
# 获取所有库名
export PGPASSWORD=密码
post_data=(`psql -X -A -d postgres -U postgres -h $db_host -p $db_port -t -c "SELECT datname FROM pg_database where datname not in('template0','template1','postgres')"`)
# 先删除存在的
echo '删除3天前的备份,时间:'$three_days_before
for i in ${post_data[@]}
do
echo '库名:='${i}
# 执行备份
echo '开始备份:'${i}_$today.dump
/usr/pgsql-14/bin/pg_dump -f $bakupdir$today/${i}_$today.dump -F c -h $db_host -p $db_port "dbname=${i} user=postgres password=密码"
echo '结束备份:'${i}_$today.dump
echo '开始删除文件:'$bakupdir$three_days_before/${i}_$three_days_before.dump
# 执行删除
# rm -rf ${i}_$three_days_before.dump
if [ -d "$bakupdir$three_days_before/${i}_$three_days_before.dump" ]; then
rm -f $bakupdir$three_days_before/${i}_$three_days_before.dump
else
echo "文件不存在跳过删除"
fi
#rm $bakupdir$three_days_before/${i}_$three_days_before.dump
echo '结束删除文件:'$bakupdir$three_days_before/${i}_$three_days_before.dump
done
#删除空文件夹
echo '开始删除历史空文件夹'
if [ -d "$bakupdir$three_days_before" ]; then
rm -rf $bakupdir$three_days_before
else
echo "文件夹不存在跳过删除"
fi
echo '结束删除历史空文件夹'
chmod +x pg_auto_bak.sh 添加执行权限
定时执行配置:
输入crontab -e打开linux定任务配置文件,添加代码行:
# 每晚23点50分自动备份postgresql数据库
50 23 * * * /home/pgDataBak/pg_auto_bak.sh
# 恢复数据 pg_restore -h 127.0.0.1 -U postgres -W -d ceshiDB -C /csbak/202508181627/ceshi_202508181627.dump

浙公网安备 33010602011771号