2012年1月29日 星期日

備份 mysql 和 drupal

基本上我們只要備份 /var/www/html 和 /var/lib/mysql 目錄即可.方法有兩種
1.利用 Linux 的 bash script 加上 cron 來自動備份.
2.利用 backup module 手動來備份
1.利用 Linux 的 bash script 加上 cron 來自動備份.
Backup
備份 web
[root@benjr ~]# mkdir -p /backup/`date +%F`
[root@benjr ~]# cd /backup/`date +%F`
[root@benjr 2007-12-26]# tar zcvf drupal.tar.gz /var/www/html
接下來備份資料庫
[root@benjr 2007-12-26]# mysqldump -u root -p database.name > mysql.sqlEnter password:
#其中的 database 請依你實際的 database 名稱,我的 database 名稱為 drupal.
[root@benjr 2007-12-26]# tar zcvf mysql.tar.gz mysql.sql
[root@benjr 2007-12-26]# rm mysql.sql
你還可以透過 bash script 加上 cron 讓他每天執行一次
shell script-Full Backup 程式
[root@benjr ~]# vi /root/backup.sh
#! /bin/bash
mkdir -p /backup/`date +%F`
cd /backup/`date +%F`
tar zcvf drupal.tar.gz /var/www/html
mysqldump -u root -p[yourpassword] database > mysql.sql
tar zcvf mysql.sql.tar.gz mysql.sql
rm mysql.sql

#-p[yourpassword] -p 和 [yourpassword] 中間沒有空格.
記得權限要改成可執行,當然沒有人要自己手動備份這些東西,最好是系統能自己備份,所以可以用 crontab 來幫我們.
[root@benjr ~]# chmod a+x backup.sh
[root@benjr ~]# crontab -e
0 2 * * * /root/backup.sh
我們的備份策略為每天晚上兩點做一次 full backup
Restore
還原 web
[root@benjr /]# cd /
[root@benjr /]# cp /backup/`date %F`/* ./
[root@benjr /]# tar zxvf drupal.tar.gz
還原資料庫
[root@benjr html]# cd /backup/`date %F`/
[root@benjr 2007-12-26]# tar zxvf mysql.sql.tar.gz
[root@benjr 2007-12-26]# mysql -u root -p
Enter password:
mysql > create database drupal;
mysql> grant all privileges on drupal.* to drupaluser@localhost identified by 'your.password' ;
mysql > exit;
[root@benjr 2007-12-26]# mysql -u root -p drupal < mysql.sql
Enter password:
當然光是備份還不能滿足我們的需求,最好這些資料都能丟到遠端,以防止系統無法開機.這邊提供一個指令 mutt ,這是一個 mail 的指令,比起傳統的指令 mail 他還可以夾檔來傳送你的 mail.
[root@benjr backup]# mutt -s "benjr.tw `date +%F` backup" -a /backup/`date +%F`.tar.gz benjr.tw@gmail.com < /root/mail.txt
mutt 參數
-s:信件主旨
-a:夾附檔案
-b:密件副本
-c:副本
< /root/mail.txt mail 的內文,請自行產生並決定內容.
date 參數
%F: full date; 和指定 %Y-%m-%d 一樣.
%Y:顯示年份
%m:顯示月份
%d:顯示日期
bash 參數
` `:此符號為數字鍵 1 旁的 ~ 鍵,在` `中的指令優先執行,並將結果套用目前指令。
所以 backup.sh 就需要在修改一下了.
[root@benjr backup]# vi /root/backup.sh#! /bin/bash
mkdir -p /backup/`date +%F`
cd  /backup/`date +%F`
tar zcvf  drupal.tar.gz /var/www/html
mysqldump -u root -p123456 drupal > mysql.sql
tar zcvf mysql.sql.tar.gz mysql.sql
rm mysql.sql
cd /backup/
tar zcvf `date +%F`.tar.gz /backup/`date +%F`
mutt -s "benjr.tw `date +%F` backup" -a /backup/`date +%F`.tar.gz benjr.tw@gmail.com < /root/mail.txt
如果你還不滿意這 bash script 太陽春,Drupal 有提供 backup/restore 的 bash script 可共使用. http://drupal.org/node/59369
2.利用 backup module 手動來備份(這個模組在實際使用上有很多的問題,還是建議直接使用 bash script來做)
可以利用此模組在網站的根目錄(/var/www/html/files/backup) 建立backup的壓縮檔,包含 Drupal 的檔案和mysql的資料庫,並且可以透過瀏覽器下載整個的備份.
Backup module的網頁為http://drupal.org/project/backup
1.在他的官方網頁下載 "backup.module" ,放在目錄 /var/www/html/modules/ 下.
[root@benjr ~]# cp backup-5.x-3.0.tar.gz /var/www/html/modules
[root@benjr ~]# cd /var/www/html/modules
[root@benjr modules]#  tar -zxvf backup-5.x-3.0.tar.gz
2. 第一步就是在管理頁面的管理/網站建置/模組將 backup 啟動.
3. 在管理中的內容管理會多出一個 "backup" 選項.直接點選就可以開始做 backup 的動作.
NOTE: 目前這個模組只支援 MySQL 為資料庫系統.

沒有留言:

張貼留言