暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

shell脚本实现MySQL全量备份+异地备份

开源Linux 2020-02-24
880



一、 知识储备

1) find命令,参考:Linux find 命令

2) MySQL导出数据库语法:


mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql

3) rsync异地备份,参考:rsync学习笔记

4) ssh免密登录,参考:SSH协议学习笔记



二、  使用场景

本次利用shell脚本实现以下需求:

  1. 每天凌晨3点执行备份,需备份所有库(db1 db2 db3)

  2. 备份的数据存放在本地/data/mysql下

  3. 将所有备份文件压缩,格式为gzip

  4. 压缩后的名称格式示例:db1-2020-02-24-20:57.sql.gz

  5. 利用rsync实现异地备份

  6. 本地备份数据保留2个月


三、 MySQL数据库备份脚本

1) 编写脚本:mysql-backup.sh

#! /bin/bash
#Save sa /etc/mysql-backup.sh
BAKDIR="/data/mysql"
MYSQLUSR="root"
MYSQLPW="123123"
LOG=/var/log/mysql-backup.log
NOW=`date +%Y-%m-%d-%H:%M`
[ ! -d $BAKDIR ] && mkdir -p $BAKDIR
echo "##########today##########" >>$LOG
echo "mysql backup begin at `date`" >>$LOG


for db in db1 db2 db3
do
mysqldump -u$MYSQLUSR -p$MYSQLPW $db | gzip > $BAKDIR/$db-$NOW.sql.gz
if [ $? == 0 ];then
echo "$NOW--$db backup succeeded!" >> $LOG
else
echo "$db backup failed!" >> $LOG
fi
done


rsync -az --delete /data/mysql/* root@192.168.1.252:/data/backup >/dev/null 2>&1
if [ $? == 0 ];then
echo "$NOW Remote backup succeeded!" >> $LOG
else
echo "$NOW Remote backup failed!" >> $LOG
fi


find $BAKDIR -type f -mtime +60 -name "*.gz"|xargs rm -rf
echo "mysql bakup end at `date`" >>$LOG

2) 给脚本添加可执行权限

chmod +x /etc/mysql-backup.sh

3) 设定每天凌晨3点定时执行该shell脚本

执行crontab -e,追加如下一行

0 3 * * * /etc/mysql-backup.sh


我们执行脚本,测试一下吧


最后再啰嗦一句


导入数据库语法:


mysql -u用户名 -p密码 数据库名 < 数据库名.sql



文章转载自开源Linux,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论