Linux下交叉备份mysql数据库shell脚本并复制到备份服务器

先说需求

最近收到一个需求,就是对某个地市的服务器上的数据库进行交叉备份,要求每天将数据库从A服务器上备份,并放到B服务器上保存,方便日后服务器宕机或者损坏带来的数据丢失风险。

怎么实现

我们知道shell脚本可以很方便的通过mysqldump命令进行备份,并且方便设置定时执行,所以我们选择shell脚本来实现此需求。先看脚本,以下脚本亲测可用,centos6.4、centos7


#!/bin/bash
#设置mysql的备份保存目录
BACKUP_DIR=/home/Data_Backup/
DATE=authcenter_`date +%Y%m%d_%H%M%S` #日期格式(作为文件名)
DUMPFILE=$DATE.sql #备份文件名
ARCHIVE=$DATE.sql.tgz #压缩文件名
LOGFILE=/home/Data_Backup/data_backup.log #日志文件路径
BKIP=172.16.0.209 #备份服务器的ip地址
BKDIR=/home/   #备份服务器的数据库存放路径
#判断备份文件存储目录是否存在,否则创建该目录
if [ ! -d $BACKUP_DIR ] ;
then
echo "备份文件夹$BACKUP_DIR文件夹不存在,正在创建.."
mkdir -p "$BACKUP_DIR"
echo "创建备份文件夹成功!"
else
echo "文件夹$BACKUP_DIR存在,无需创建!"
fi

if [ ! -f "$LOGFILE" ] ;
then
echo "文件不存在"
touch "$LOGFILE"
else
echo "文件存在"
fi
#开始备份之前,将备份信息头写入日记文件
echo "" >> $LOGFILE
echo "" >> $LOGFILE
echo "———————————————" >> $LOGFILE
echo "BACKUP DATE:" $(date +"%y-%m-%d %H:%M:%S") >> $LOGFILE
echo "———————————————– " >> $LOGFILE

#切换至备份目录
cd $BACKUP_DIR
#数据库服务器ip,填写服务器的公网地址即可
#host=xx.xx.xx.xx
#用户名
user=root
#密码
password=root
#要备份的数据库名
db=authcenter

#执行备份语句
#mysqldump -h$host -u$user -p$password $db > ./test.sql
mysqldump  -u$user -p$password $db > ./$DUMPFILE

#判断数据库备份是否成功
if [[ $? == 0 ]];
echo "备份成功"
 then
#创建备份文件的压缩包
tar czvf $ARCHIVE $DUMPFILE >> $LOGFILE 2>&1
#输入备份成功的消息到日记文件
echo "[$ARCHIVE] Backup Successful" >> $LOGFILE
#删除原始备份文件,只需保 留数据库备份文件的压缩包即可
rm -f $DUMPFILE
else
echo "Database Backup Fail!" >> $LOGFILE
fi

#拷贝到其他服务器上
scp $ARCHIVE root@$BKIP:$BKDIR

脚本写完后命名为bk.sh,我们将脚本上传的到服务器上某个目录,这里我上传到/home/目录下
首先给bk.sh赋可执行权限:

cd /home/
chmod -u+x bk.sh

添加定时任务:
在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
比如我们现在设置的是每天 晚上23点0分执行

0 23 * * * sh /home/bk.sh

存盘退出后,在命令行输入 service crond restart ; 提示如下说明重启定时任务成功

查看crontab的日志
日志文件为/var/log/cron

tail -f /var/log/cron

找到对应时间,是否执行指令
这种方式只能看到是否执行,但是并无法确定是否执行成功,我们可以自己看一下程序是否达到执行效果确认

原创文章 24 获赞 21 访问量 702

猜你喜欢

转载自blog.csdn.net/zhangbinch/article/details/105535974