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

一、知识储备工作:

  1. Mysql导出数据库语法:
mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
  1. shell脚本for循环及if条件判断基本语法
  2. gzip压缩文件用法
  3. rsync异地备份用法:
  4. ssh免密登录

二、场景

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

  1. 每天凌晨3点执行备份,需备份所有库(db1 db2 db3)
  2. 备份的数据存放在本地/data/mysql下
  3. 将所有备份文件压缩,格式为gzip
  4. 压缩后的名称格式示例:qin-2020-02-24-21:19.sql.gz
  5. 利用rsync实现异地备份
  6. 本地备份数据保留2个月

三、MySQL数据库备份脚本

  1. 编写脚本:mysql-backup.sh
  1 #! /bin/bash
  2 #Save sa /etc/mysql-backup.sh
  3 BAKDIR="/data/mysql"
  4 MYSQLUSR="root"
  5 MYSQLPW="123123"
  6 LOG=/var/log/mysql-backup.log
  7 NOW=`date +%Y-%m-%d-%H:%M`
  8 [ ! -d $BAKDIR ] && mkdir -p $BAKDIR
  9 echo "##########today##########" >>$LOG
 10 echo "mysql bakup begin at `date`" >>$LOG
 11
 12 for db in qin1 qin2 qin3
 13   do
 14     mysqldump -u$MYSQLUSR -p$MYSQLPW $db | gzip >  $BAKDIR/$db-$NOW.sql.gz
 15     if [ $? == 0 ];then
 16         echo "$NOW--$db  backup succeeded!" >> $LOG
 17     else
 18         echo "$db backup failed!" >> $LOG
 19     fi
 20 done
 21
 22 rsync -az  --delete  /data/mysql/* [email protected]:/data/backup
 23 if [ $? == 0 ];then
 24         echo "$NOW Remote backup succeeded!" >> $LOG
 25 else
 26         echo "$NOW Remote backup failed!" >> $LOG
 27 fi
 28
 29 find $BAKDIR -type f -mtime +60 |xargs rm -rf
 30 echo "mysql bakup end at `date`" >>$LOG
  1. 给脚本添加可执行权限
chmod +x /etc/mysql-backup.sh
  1. 设定每天凌晨3点定时执行该shell脚本
    crontab -e
    0 3 * * * /etc/mysql-backup.sh

  2. 我们执行脚本,测试一下吧
    在这里插入图片描述

最后再啰嗦一句

导入数据库语法:

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

更多IT技术,请微信搜索公众号秦露露或者扫描下方二维码关注

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章