1. 備份MySQL資料庫

最愛喝酸奶發表於2018-12-29

假如一臺MySQL伺服器,跑著5個資料庫,在沒有做主從的情況下,需要對這5個庫進行備份,具體要求如下:

1) 每天備份一次,需要備份所有的庫;

2) 把備份資料存放到 /data/backup/ 下;

3) 備份檔名稱格式示例:database_name-2018-11-11.sql;

4) 需要對1天前的所有sql檔案壓縮,格式為gzip;

5) 本地資料保留1周;

6) 需要把備份的資料同步到遠端備份中心,假如本機可以直接通過rsync命令同步,同步目標地址為rsync://10.10.10.10/mysqlbak/ ;

7) 遠端備份資料需要保留1個月。

參考指令碼如下:

#!/bin/bash
##備份本地資料庫
##本地保留1周,遠端保留一個月

mysqldump="/usr/local/mysql/bin/mysqldump"
bakuser="backup"
passwd="34KpmyzUq"
bakdir="/data/backup"
remote_dir="rsync://10.10.10.10/mysqlbak"
d1=`date +%F`
d2=`date +%d`

#定義日誌
exec &> /tmp/mysql_bak.log
echo "mysql backup begin at `date`"

#對所有資料庫進行遍歷
for db in db1 db2 db3 db4 db5
do
    $mysqldump -u$bakuser -p$passwd $db >$bakdir/$db-$d1.sql
done

#對1天前的所有sql檔案壓縮
find $bakdir/ -type f -name "*.sql" -mtime +1 |xargs gzip

#查詢並刪除一週以前的老檔案
find $bakdir/ -type f -mtime +7 |xargs rm

#把當天的備份檔案同步到遠端
for db in db1 db2 db3 db4 db5
do
    rsync -a $bakdir/$db-$d1.sql $remote_dir/$db-$d2.sql
done

echo "mysql backup end at `date`"

指令碼中,

  1. shell指令碼中,可使用反引號來引用一條命令的結果,然後將其儲存到變數中

  2. &> 指定正確輸出和錯誤輸出到 /tmp/mysql_bak.log

  3. exec 命令,會接管該shell指令碼中後續所有的命令,可以把exec理解為“一個盒子”,將exec那行以下所有的命令都拉到“這個盒子”裡面執行。exec &> 1.txt 可以理解為 “這個盒子”所有操作的輸出都寫入到 1.txt 中


相關文章