基本上架站 CMS (Drupal / WordPress) 我們只要備份網頁 /var/www/html 資料與 Mysql / MariaDB (依據你所使用的資料庫) 的資料庫 /var/lib/mysql 目錄的資料即可.方法有兩種
- 利用 Linux 的 bash script 加上 cron 來自動備份.
- 利用 Drupal backup module 手動來備份
利用 Linux 的 bash script 加上 cron 來自動備份
- 備份網頁
[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.sql Enter 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 讓他每天執行一次.
[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.
- 還原網頁
[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
當然光是備份還不能滿足我們的需求,最好這些資料都能丟到遠端,以防止系統無法開機.這邊提供一個指令 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
Drupal 利用 backup module 手動來備份
可以利用此模組在網站的根目錄 (/var/www/html/files/backup) 建立 backup 的壓縮檔,包含 Drupal 的檔案和 Mysql 的資料庫,並且可以透過瀏覽器下載整個的備份.Backup module的網頁為http://drupal.org/project/backup
note: 這個模組在實際使用上有很多的問題,還是建議直接使用 bash script來做
-
在他的官方網頁下載 "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
-
第一步就是在管理頁面的管理/網站建置/模組將 backup 啟動.
-
在管理中的內容管理會多出一個 "backup" 選項.直接點選就可以開始做 backup 的動作.
NOTE: 目前這個模組只支援 MySQL 為資料庫系統.
8 thoughts on “CMS 網頁&資料庫備份”