欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-20 20:44:16
...

一、知识储备工作:

  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/* aaa@qq.com:/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. 我们执行脚本,测试一下吧
    shell脚本实现MySQL全量备份+异地备份

最后再啰嗦一句

导入数据库语法:

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

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

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