使用gpbackup和gprestore并行备份脚本

自动多节点备份脚本

#!/bin/sh
source /etc/profile
PATH=$PATH:$HOME/bin
source /usr/local/greenplum-db/greenplum_path.sh
export MASTER_DATA_DIRECTORY=/data/master/gpseg-1
export PATH

#定义颜色
RED='\E[1;31m'			#红色
BLUE='\E[1;34m'			#蓝色 	
GREEN='\E[1;32m'		#绿色 
RESET='\E[0m'			#清除颜色

#定义变量 
DATE=`date +%Y%m%d%H%M`
OLD_DATE=`date -d "2 days ago" +%Y%m%d`
TARGETDIR="BIP3_GREENPLUM/full"
HOSTNAME=${1:-"192.16xxxxx"}
USER=${2:-"gpadmin"}
PORT=5432
DB_NAME=$(psql -U $USER -p $PORT -d postgres -tAXc "select datname from pg_database where datname <> 'template0' and datname <> 'template1' and datname <> 'gpperfmon' and datname <> 'postgres' ;")
if [ $? != 0 ] ;then
    echo -e "$RED 备份数据库失败,请根据错误检查你的登陆信息!$RESET\n"
    exit 1
fi

##开始标记
START_DATE=`date "+%Y-%m-%d %H:%M:%S"`
echo -e "\n\n\n======================================= $START_DATE ====================================="
#判断运行用户
echo -e "$BLUE 判断当前用户是否为root用户  $RESET\n"
user=`whoami`
machinename=`uname -m`
if [ "$user" = "root" ]; then
    echo -e "$RED 请在gpadmin下执行该脚本 $RESET\n"
    exit 1
fi

#开始备份并删除2天前备份
for i in ${DB_NAME};do
        BACKUP_DIR="/data/backup/${DATE}/db_${i}_backup_${DATE}"
        #创建备份目录
        mkdir ${BACKUP_DIR} -p
        gpbackup_thead_count=`ps -ef|grep gpbackup|wc -l`
        if [ ${gpbackup_thead_count} -gt 2 ] ;then
           sleep 30
           echo 'start backup'
           /usr/local/greenplum-db/bin/gpbackup --dbname=$i --backup-dir=$BACKUP_DIR --compression-level=5 --jobs=8 > $BACKUP_DIR/$DATE.log
            if [ $? == 0 ] ;then
	        echo -e "$GREEN $i backup success! $RESET\n" >> $BACKUP_DIR/$DATE.log 2>&1 &
                echo "Backup Sucessful! at ${DATE} " > /tmp/db_backup_check.log
                ##ssh gpadmin@192.16xxxx "sshpass -p'password' scp -o StrictHostKeyChecking=no -r ${BACKUP_DIR} administrator@192.1xxxxx:D\:/OA-WEBbackup/${TARGETDIR}"
                #传输日志和备份文件到备份服务器
	     else
		 echo -e "$RED $i backup failure!$RESET\n" >> $BACKUP_DIR/$DATE.log 2>&1 &
                echo "Backup failed, Please check!" > /tmp/db_backup_check.log
	     fi
	 else
           echo 'start backup'
           /usr/local/greenplum-db/bin/gpbackup --dbname=$i --backup-dir=$BACKUP_DIR --compression-level=5 --jobs=8 > $BACKUP_DIR/$DATE.log
            if [ $? == 0 ] ;then
	       echo -e "$GREEN $i backup success! $RESET\n" >> $BACKUP_DIR/$DATE.log 2>&1 &
               #传输日志和备份文件到备份服务器
               echo "Backup Sucessful! at ${DATE} " > /tmp/db_backup_check.log
	    else
		echo -e "$RED $i backup failure!$RESET\n" >> $BACKUP_DIR/$DATE.log 2>&1 &
                echo "Backup failed, Please check!" > /tmp/db_backup_check.log
	    fi
        fi
done
    #传输日志和备份文件到备份服务器
    scp -r /data/backup/${DATE} root@192.xxxx:/data/greenplum_backup/${DATE}_105
    ssh gpadmin@192.16xxxxx " scp -r /data/backup/${DATE} root@192.xxxxxx:/data/greenplum_backup/${DATE}_125"
    ssh gpadmin@192.16xxxxx " scp -r /data/backup/${DATE} root@192.xxxxxx:/data/greenplum_backup/${DATE}_115"
    ssh gpadmin@192.16xxxxx " scp -r /data/backup/${DATE} root@192.xxxxxx:/data/greenplum_backup/${DATE}_136"

 #清理历史数据
if [ -d "/data/backup/${OLD_DATE}0201" ];then
    echo "准备清理如下备份文件/data/backup/${OLD_DATE}0201"
    rm -rf /data/backup/${OLD_DATE}0101
    #ssh gpadmin@192.168xxxxxx " rm -rf /data/backup/${OLD_DATE}0201"
    ssh gpadmin@192.16xxxxx " rm -rf /data/backup/${OLD_DATE}0201"
    ssh gpadmin@192.16xxxxx " rm -rf /data/backup/${OLD_DATE}0201"
    ssh gpadmin@192.16xxxxx " rm -rf /data/backup/${OLD_DATE}0201"
    echo "清理完成"
else
   echo "无历史备份文件,不执行删除!"
fi
END_DATE=`date "+%Y-%m-%d %H:%M:%S"`
echo -e "\n======================================= $END_DATE =====================================\n\n"
posted @ 2025-06-26 16:26  数据库小白(专注)  阅读(15)  评论(0)    收藏  举报