1. 程式人生 > >shell 練習(07)——MySQL 數據庫備份

shell 練習(07)——MySQL 數據庫備份

root 值範圍 練習 備份命令 定義 path 設計 word mysqld

1. 題目

設計一個 shell 腳本來備份數據庫,首先在本地服務器上保存一份數據,然後再遠程拷貝一份,本地保存一周的數據,遠程保存一個月。

假定,我們已經知道了 mysql root 賬戶密碼,要備份的數據庫為 wenming ,本地備份目錄為 /data/backup/mysql,遠程服務器 ip 為 192.168.12.34 ,遠程提供了一個 rsync 服務,備份的地址是 192.168,12.34::backup . 寫完腳本後,需要加入到cron 中,每天淩晨 3 點執行。

2. 習題分析

  1. 首先要會寫 mysql 數據庫的備份命令,會寫命令行,就把它直接寫到腳本裏;
  2. 因為涉及到遠程和本地服務器的備份,所以會用到 rsync 命令,還要懂得用這個命令在本地和遠程服務器之間傳輸文件;
  3. 最後一個要求是,備份文件的過期時間,所以要實現時間判斷,並刪除的功能;通常使用的方法是 find 命令,判斷文件時間,再刪除。但是 find 命令對於遠程服務器就比較難實現了。這裏建議使用 data +%w 和 data +%d 命令,分別表示周幾和幾號。

3. 腳本

#!/bin/bash
### backup mysql

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/bin:/usr/sbin:/usr/local/mysql/bin

d1=`date +%w`
d2=`data +%d`

pass="your_mysql_password"
backupdir=/data/backup/mysql
r_backupdir=192.168.12.34::backup

exec 1>/your/mysql/log/path.log  2>/your/mysql/log/path.log
echo "mysql backup begin at date `date +"%F %T"`"
mysqldump  -uroot -p${pass} wenming > ${backupdir}/${d1}.sql
rsync  -az ${backupdir}/${d1}.sql $r_backupdir/${d2}.sql

echo "mysql backup end at `date +"%F %T"`"

4. 解析

  1. 設定 PATH 的原因,是可能我們在後面使用的 mysqldump 命令並不在 PATH 路徑。或者,你可以使用 mysqldump 的全路徑。
  2. 變量 d1 為當天是周幾,變量 d2 為當天是這個月的幾號。周的取值範圍是 0-6,月的是1-31。本地存一周,就用 d1 取值,無論怎麽循環都只有 0-6 個文件。遠程用 d2 取值,存一個月,無論怎麽循環都只有1-31個文件。
  3. 定義 exec 1>/your/mysql/log/path.log 2>/your/mysql/log/path.log ,表示對輸出和錯誤輸出進行重定向,在下面的命令的所有正確和錯誤的輸出內容都保存在 /your/mysql/log/path.log 日誌。
  4. mysqldump 就是 mysql 數據庫用來備份的命令,不多解釋了。
  5. rsync 就是遠程同步,遠程傳輸復制文件的一個命令,選項 -z 表示在傳輸的過程會對文件進行壓縮處理。

shell 練習(07)——MySQL 數據庫備份