暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PG一键备份多个数据库脚本分享

原创 FC·NC 2024-01-16
428

一般情况下,一个服务器上不止一个数据库,因此此脚本可实现多个数据库一同备份,也可以备份单个数据库。

脚本的注意事项:

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论