MySQL指定数据库全量备份表结构和数据并将备份文件发送到其他服务器

MySQL指定数据库全量备份表结构和数据,将备份文件发送到其他服务器

#!/bin/bash
# @Author Guo.ck
# @DateTime 2022年5月26日
# 使用spawn语法,必须安装依赖环境 yum -y install expect

# crontab 定时任务,每天凌晨两点0分执行
# 0 2 * * *   /opt/project/dbback/saas_all_back.sh

mysqldump=/usr/bin/mysqldump
BACKUP_FOLDERNAME="/usr/local/mysql/backup_all"  	#数据库备份文件的主目录
DB_HOSTNAME="xx.xx.xx.xx"              				  #mysql所在主机的主机名
DB_USERNAME="root"                   				    #mysql登录用户名
DB_PASSWORD="password"                 		      #mysql登录密码
# 需要备份的数据库名称
DATABASES=(
"saas_partition_xxx1"
"saas_partition_xxx2"
)
#=========
echo "数据库备份工具"
#CURRENT_DATE=$(date +%F)
CURRENT_DATE=$(date +%F)              #定义当前日期为变量
BACKUP_FOLDER="${BACKUP_FOLDERNAME}/${CURRENT_DATE}" #存放数据库备份文件的目录
mkdir $BACKUP_FOLDER #创建数据库备份文件目录
#统计需要被备份的数据库
count=0
while [ "x${DATABASES[count]}" != "x" ];do
    count=$(( count + 1 ))
done
echo "[+] 【${count}】个数据库开始备份..."
#循环这个数据库名称列表然后逐个备份这些数据库
for DATABASE in ${DATABASES[@]};do
    echo "[+] Mysql-Dumping: ${DATABASE}"
    echo -n "   Began:  ";echo $(date)
	if [ ! -d "${BACKUP_FOLDER}" ];then
      mkdir ${BACKUP_FOLDER}
	fi
	if $($mysqldump  --quick --events --flush-logs --single-transaction -h ${DB_HOSTNAME} -u${DB_USERNAME} -p${DB_PASSWORD} ${DATABASE} > "${BACKUP_FOLDER}/${DATABASE}.sql"); then
        echo "  【$DATABASE】备份完成!"
    else
        echo "  【$DATABASE】备份失败!"
    fi
        echo -n "  所有数据库备份完成: ";echo $(date)
done
echo
# 开始压缩备份文件
echo "开始压缩备份文件【${BACKUP_FOLDER}/*.sql】到【${BACKUP_FOLDER}/dbback_${CURRENT_DATE}.tar.gz】"
cd ${BACKUP_FOLDER}
tar czf ${BACKUP_FOLDER}/dbback_${CURRENT_DATE}.tar.gz *.sql
rm -f ${BACKUP_FOLDER}/*.sql
echo "完成压缩备份文件"

echo "开始传输文件到其他服务器"
# 传输文件到其他服务器
/usr/bin/expect <<-EOF

#!/usr/bin/expect -f
set timeout 20
spawn scp ${BACKUP_FOLDER}/dbback_${CURRENT_DATE}.tar.gz root@xx.xx.xx.xx:/opt/project/dbback
expect "root@xx.xx.xx.xx's password:"
exec sleep 1
send "password\n"

expect eof;
EOF
echo "完成传输文件到其他服务器"

echo "删除 10 天前的备份文件"
d=`date -d '10 days ago' '+%Y-%m-%d'`
# 进入上级目录
cd ${BACKUP_FOLDER}/..
# 判断当前目录不是根
if [ "`pwd`" != "/" ];then
  rm -rf dbback_${d}.tar.gz
fi
echo "清理10天前的备份文件完成"

echo "所有全量备份工作完成"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值