一、知識儲備工作:
- Mysql導出數據庫語法:
mysqldump -u用戶名 -p密碼 數據庫名 > 數據庫名.sql
- shell腳本for循環及if條件判斷基本語法
- gzip壓縮文件用法
- rsync異地備份用法:
- ssh免密登錄
二、場景
本次利用shell腳本實現以下需求:
- 每天凌晨3點執行備份,需備份所有庫(db1 db2 db3)
- 備份的數據存放在本地/data/mysql下
- 將所有備份文件壓縮,格式爲gzip
- 壓縮後的名稱格式示例:qin-2020-02-24-21:19.sql.gz
- 利用rsync實現異地備份
- 本地備份數據保留2個月
三、MySQL數據庫備份腳本
- 編寫腳本: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
- 給腳本添加可執行權限
chmod +x /etc/mysql-backup.sh
-
設定每天凌晨3點定時執行該shell腳本
crontab -e
0 3 * * * /etc/mysql-backup.sh -
我們執行腳本,測試一下吧
最後再囉嗦一句
導入數據庫語法:
mysql -u用戶名 -p密碼 數據庫名 < 數據庫名.sql
更多IT技術,請微信搜索公衆號秦露露
或者掃描下方二維碼關注