一般情况下,一个服务器上不止一个数据库,因此此脚本可实现多个数据库一同备份,也可以备份单个数据库。
脚本的注意事项:
1、采用本地备份和外部备份(挂载共享文件目录,此脚本挂载在/backup目录下)
2、此脚本未做账号密码的处理,此脚本仅做参考;
以下是脚本全文:
#/bin/basfh
#
#********************************************************************
#Author: cc zhou
#QQ: kezhoucc@icloud.com
#Date: 2023-12-20
#FileName: postgresql_multi_backup.sh
#Version: v1.0
#Description: backup postgresql
#Copyright (C): 2023 All rights reserved
#********************************************************************
#定义参数
postgresql_home=/usr/psql-14.3 #postgresql安装目录
postgresql_user="postgres" #postgresql备份用户
postgresql_passwd="XXXXXXXXXX" #postgresql备份密码
postgresql_host="localhost" #postgresql数据库地址
postgresql_port="5432" #postgresql端口号
postgresql_charset="utf8" #postgresql编码
backup_db_arraylist=("db1" "db2" "db3") #要备份的数据库名称,多个用空格分开隔开
backup_path=/backup #备份数据存放的位置
backup_location=/home/postgres/dbbackup #本地备份存放位置
expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭
expire_days=3 #过期时间天数 默认为三天,此项功能只有在expire_backup_delete开启才生效
backup_time=`date +%Y%m%d%H%M` #定义备份日期
backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间
backup_dir=$backup_path/$backup_Ymd #备份文件夹全路径
welcome_msg="欢迎使用postgresql备份脚本工具!" #欢迎语
postgresql_ps=`ps -ef | grep PostgreSQL | wc -l` #查看数据库是否启动
postgresql_listen=`netstat -an | grep LISTEN | grep $postgresql_port | wc -l` #查看数据库监听有没有启动`
#开始备份操作
if [ [$postgresql_ps == 0] -o [$postgresql_listen == 0] ]; then
echo "ERROR: postgresql 未运行! 备份失败!"
exit
else
echo $welcome_msg
fi
$postgresql_home/bin/psql -h$postgresql_host -p$postgresql_port "user=$postgresql_user password=$postgresql_passwd" <<end
end
flag=`echo $?`
if [ $flag != "0" ]; then
echo "ERROR: 不能连接到postgresql数据库!备份失败!"
exit
else
echo "postgresql数据库连接成功!请等待......"
#判断有没有定义备份的数据库,如果定义则备份,否则退出备份
if [ "$backup_db_arraylist" != "" ]; then
for dbname in ${backup_db_arraylist[@]}
do
echo "数据库 $dbname 开始备份..."
`mkdir -p $backup_dir`
`$postgresql_home/bin/pg_dump -h$postgresql_host -p$postgresql_port "dbname=$dbname user=$postgresql_user password=$postgresql_passwd" | gzip >$backup_dir/$dbname-$backup_time.sql.gz`
flag=`echo $?`
if [ $flag == "0" ]; then
echo "数据库 $dbname 成功备份到 $backup_dir/$dbname-$backup_time.sql.gz"
`cp -rp $backup_dir $backup_location`
flag=`echo $?`
if [ $flag == "0" ]; then
echo "$dbname 本地备份成功!"
else
echo "$dbname 本地备份失败!"
fi
else
echo "数据库 $dbname 备份失败!"
fi
done
else
echo "ERRPR:没有数据库需要备份!备份失败!"
exit
fi
#如果开启了删除过期备份,则进行删除操作
if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ]; then
`find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
flag=`echo $?`
if [ $flag == "0" ]; then
echo "过期备份已删除成功!"
else
echo "过期备份删除失败!"
exit
fi
fi
echo "所有数据库已备份成功!谢谢使用!"
exit
fi「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




