2011年7月31日 星期日

MySQL 自動備份並壓縮


#!/bin/bash
#by Ron 2011-07-31
base_dir=/var/www/vhosts/abc.com/db;
folder=$base_dir/$(date "+%Y-%m");
if [ ! -d $folder ]; then
        mkdir $folder;
fi
cd $folder;
mysqldump -u 帳號 -p密碼 database1 > database1_$(date "+%Y-%m-%d").sql;
mysqldump -u 帳號 -p密碼 database2 > database2_$(date "+%Y-%m-%d").sql;
mysqldump -u 帳號 -p密碼 database3 > database3_$(date "+%Y-%m-%d").sql;
bzip2 -z *;
chown user:group $folder;
chmod 2770 $folder;

if [ $(date "+%d") == "02" ]; then
        year_folder=$base_dir/$(date "+%Y");
        if [ ! -d $year_folder ]; then
                mkdir $year_folder;
        fi
        mv *01.sql.bz2 $year_folder;
        chown user:group $year_folder;
        chmod 2770 $year_folder;
        last_2_month=$(date -d '2 months ago' "+%Y-%m");
        rm -rf $base_dir/$last_2_month;
fi

1. 備份頻率:每天

2. 資料夾與檔案名稱
(1) 以 年+月 做為資料夾名稱,例如:2011-07
(2) 以 年+月+日 做為檔案前綴名稱,例如:2011-07-01.sql
(3) 完整路徑:
/var/www/vhosts/abc.com/db/2011-07/db1_2011-07-01.sql;
/var/www/vhosts/abc.com/db/2011-07/db1_2011-07-02.sql;
/var/www/vhosts/abc.com/db/2011-07/db2_2011-07-01.sql;
/var/www/vhosts/abc.com/db/2011-07/db2_2011-07-02.sql;
..
3. 壓縮:bzip2 -z 檔名 (用這個方式壓縮後,只會留下壓縮檔,原始檔會自動消失。)
db1_2011-07-01.sql => db1_2011-07-01.sql.bz2

4 . 額外處理
(1) 保留每月1日的備份:
每月 2 日的時候,把1日的備份檔移到年份資料夾。
/var/www/vhosts/abc.com/db/2011/db1_2011-05-01.sql.bz2
/var/www/vhosts/abc.com/db/2011/db1_2011-06-01.sql.bz2
/var/www/vhosts/abc.com/db/2011/db1_2011-07-01.sql.bz2
(2) .刪除兩個月前的備份
依照前幾個步驟,資料夾應該會長的像這樣:
/var/www/vhosts/abc.com/db/2010/
/var/www/vhosts/abc.com/db/2011/
/var/www/vhosts/abc.com/db/2011-05/
/var/www/vhosts/abc.com/db/2011-06/
/var/www/vhosts/abc.com/db/2011-07/
每月2日的時候,往回推兩個月,把該月的的備份刪除。
以此例而言,會刪除 /var/www/vhosts/abc.com/db/2011-05/ 這個資料夾

5. 備註
(1) 最近兩個月,每天一份。兩個月之前的,保留每月1日的備份。
(2)這個方式仍然要手動輸入資料庫名稱。因為並不是全部都要備份,所以我採用此方式。

沒有留言:

張貼留言