1,747 瀏覽數

備份 Mysql 和 Drupal / WordPress

基本上架站我們只要備份網頁 /var/www/html 資料與 mysql (依據你所使用的資料庫) 的資料庫 /var/lib/mysql 目錄的資料即可.方法有兩種

  1. 利用 Linux 的 bash script 加上 cron 來自動備份.
  2. 利用 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

利用 backup module 手動來備份

可以利用此模組在網站的根目錄 (/var/www/html/files/backup) 建立 backup 的壓縮檔,包含 Drupal 的檔案和 Mysql 的資料庫,並且可以透過瀏覽器下載整個的備份.Backup module的網頁為http://drupal.org/project/backup 

note: 這個模組在實際使用上有很多的問題,還是建議直接使用 bash script來做

  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 啟動.
    backup01
  3. 在管理中的內容管理會多出一個 "backup" 選項.直接點選就可以開始做 backup 的動作.
    backup02

NOTE: 目前這個模組只支援 MySQL 為資料庫系統.

8 個網友的想法 “備份 Mysql 和 Drupal / WordPress

  1. 自動參照通知: 備份 Backup – Benjr.tw

  2. 自動參照通知: Benjr.tw 搬家到 Linode | Benjr.tw

  3. 自動參照通知: Ubuntu + Dropbox | Benjr.tw

  4. 自動參照通知: Drupal | Benjr.tw

  5. 自動參照通知: Drupal 小版本快速更新方式 | Benjr.tw

  6. 自動參照通知: Drupal 7 – Benjr.tw 搬家 | Benjr.tw

  7. 自動參照通知: 升級 Drupal 5 到 Drupal 6 | Benjr.tw

  8. 自動參照通知: CentOS 6 – 升級 Drupal 6 到 Drupal 7 | Benjr.tw

發表迴響