Mysql5.7.26_Restore

#!/bin/bash
DB=abc
MUSER=root
MPASS=Dfsc123321
MHOST=localhost
MSQL=/application/mysql/bin/mysql
BAKFILE=/application/mysql/bin/mysqldump
MCMD="create database $DB charset=utf8;"
BAKDIR=/bak_mysql
Date=$(date +%F)
SQLFILE=${BAKDIR}/$DB\_$Date.sql
GTIDCMD="show variables like '%gtid_mode%';"
GTIDPAR="--flush-logs --set-gtid-purged=OFF"
function chkdata()
{
#检验Rsync传过来的备份数据,是否完整。
clear
date
echo -e "\033[31m 开始检验数据.............\033[0m"
sleep 2
cd $BAKDIR
md5sum -c md5_$DB\_$Date 2>/tmp/md5_mysql.log
if [ $? -ne 0 ];then
    echo "数据不完整,请重新同步数据。"
    exit
else
    echo "数据完整,可以还原。"
fi
}
function bakdata()
{
echo -e "\033[31m 开始备份旧数据库...........\033[0m"
sleep 2
#查看是否存在要还原的数据库,并先备份。
$MSQL -u$MUSER -p$MPASS -h$MHOST -e 'show databases;' 2>/tmp/sec.log|grep "$DB" >/dev/null
if [ $? -ne 0 ];then
    echo -e "\033[31m 数据库中没有旧数据库。\033[0m"
    DATANUM=0
#用于恢复的时判断有无旧数据 0,不存在,1存在。
    return
else
    DATANUM=1
fi
#检测Mysql 有没有开启GTID
$MSQL -u$MUSER -p$MPASS -h$MHOST -e "$GTIDCMD" 2>/tmp/se.log|grep "ON" >/dev/null
#判断GTID是否开启,分别执行不同的备份命令。
if [ $? -eq 0 ];then
$BAKFILE -u$MUSER -p$MPASS -h$MHOST $GTIDPAR $DB >/tmp/$DB\_old$Date.sql 2>/tmp/bak.log
  if [ $? -ne 0 ];then
      echo "备份有问题,日志文件 /tmp/bak.log 。"
      exit
  else
      echo -e "\033[31m 旧数据备份完成。\033[0m"
  fi
else
$BAKFILE -u$MUSER -p$MPASS -h$MHOST $DB >/tmp/$DB\_old$Date.sql 2>/tmp/bak.log
  if [ $? -ne 0 ];then
      echo "备份有问题,日志文件 /tmp/bak.log 。"
      exit
  else
      echo -e "\033[31m 旧数据备份完成。\033[0m"
  fi
fi
}

function resdata()
{
echo -e "\033[31m 开始还原新数据...........\033[0m"
sleep 2
#判断需要恢复的数据库是否存在。
if [ $DATANUM -eq 1 ];then #如果旧数据库存在,直接还原。
$MSQL -u$MUSER -p$MPASS -h$MHOST $DB <$SQLFILE 2>/tmp/mrestore.log
  if [ $? -ne 0 ];then
       echo "数据还原有问题,日志文件 /tmp/mrestore.log 。"
       exit
  else
       echo -e "\033[31m 新数据还原完成。\033[0m"
  fi
fi
if [ $DATANUM -eq 0 ];then #不存在旧数据库,创建后再还原。
$MSQL -u$MUSER -p$MPASS -h$MHOST -e "${MCMD}" 2>/tmp/mcreate.log
  if [ $? -ne 0 ];then
      echo "创建数据库有问题,日志文件 /tmp/mcreate.log 。"
      exit
  else
$MSQL -u$MUSER -p$MPASS -h$MHOST $DB <$SQLFILE 2>/tmp/mrestore.log
      echo -e "\033[31m 新数据还原完成。\033[0m"
  fi
fi
date
}
chkdata
bakdata
resdata