使用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"

浙公网安备 33010602011771号