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技術,請微信搜索公衆號秦露露或者掃描下方二維碼關注

在這裏插入圖片描述

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