上週開始持續調整以 Joomla 架設的資產管理系統,其中一個需求是自動定期備份 DB,如此便可追蹤這些設備在一段時間內的變化(其實我還是覺得如果要作版本控管的話,用 svn 或者 git 之類的版本控管軟體會更好…),當發生不幸的意外時也才能迅速的將寶貴的資料還原。
由於 Joomla 的資料都存在 MySQL DB 中,因此今天就 survey 了一下讓 MySQL 定期排程備份的作法。
I.以 shell script 呼叫 mysqldump 執行備份,將此 script 寫入 crontab 排程中
參考資料:MySQL 備份 shell script。這 script 的核心非常簡單,只有一行而已 (其他更 fancy 的工具應該也是呼叫這個 MySQL 內建的 dump 工具):
mysqldump -u $db_user -h $db_host -p$db_passwd $db | $GZIP -9 > "$backup_dir/backup.0/$time.$db.gz"
而 crontab 的編寫也是玩 Linux / Unix 的基本功,可參考:鳥哥的 Linux 私房菜-第十六章、例行性工作排程 (crontab)。以這個方法來備份 MySQL 大概是最不求人、也相當普遍的作法。
II.利用 Navicat full version 來作
參考資料:[教學] MySQL 定期自動備份。這是一個可安裝在 Windows / Linux / Mac OS X 平台的 client 端軟體,安裝和操作都相當方便 (畫面蠻漂亮的)。雖然說 Navicat 有推出一個免費的 Navicat Lite,但是免費版連手動執行 backup 都做不到呀!因此它就很遺憾的出局了,但是有錢買來用的話應該相當好用 (最貴的授權要台幣一萬出頭),看來這軟體也是相當的知名。
III.利用 phpMyBackupPro (pMBP) 來作
2010-03-23 補充:[網管人雜誌] MySQL 專用備份工具-phpMyBackupPro (長篇的詳細說明)
參考資料:Web 介面的 MySQL 備份工具-phpMyBackupPro, 官方網站下載頁面在這裡,這是個 host 在 SourceForge 的 open source 專案,所以是免費的!安裝的過程非常簡單,在 Windows 平台上只要把解縮後的 phpMyBackupPro 資料夾複製到 Apache 的根目錄下即可。
2010-03-23 補充:在 Linux 平台上安裝也很簡單,只要把資料夾 export 及檔案 global_conf.php 設定權限為 0777 就可以了。執行身分為 apache。
其中最重要的一點是,若 DB 中有儲存中文資料,要依照論壇中 slimn 前輩提供的修改方式來調整,經過測試確實有效 (Windows 平台 OK, 目前在 Linux 測試機上仍為亂碼 [2010-03-23]):
以下補充教學文章中沒有特別說明的設定畫面。
在 configuration tab中,可設定僅備份指定 DB:
在 backup tab 中,記得要手動選取欲執行備份的 DB:
在 backup tab 中可設定是否要壓縮備份產出的 .sql 檔,有 gzip / zip 格式:
在 schedule backup tab 中,可設定自動執行備份的週期:
包括每小時、每6小時、每12小時、每天、每週、每月等等週期。
在 schedule backup tab 中,也可自訂定期備份 php 檔的檔名:
在 import tab 中,若已經執行過備份,則可觀看指定備份檔(.sql) 的各項資訊:
包括執行備份的日期時間、DB Name、file size 等。
關於 schedule backup:
在Web 介面的 MySQL 備份工具-phpMyBackupPro一文中提到,schedule backup 感覺不太實用,因為排程備份的作法是一段 php 程式碼,而phpMyBackupPro 只是負責幫你產出這段 code,必須要另外加工讓這段 code 能夠定時執行 (不管是利用網頁的 META Refresh 或者在 crontab 中定期用 wget 去 request 這個 php 網頁)。但我覺得 phpMyBackupPro 還可提供備份後自動上傳到 FTP、自動寄送 mail 等等,而且檢視/還原 backup 檔案的介面也十分簡便,安裝和設定也很容易就可以上手,還是很不錯用的啦!
1 則留言:
我是用apache 2.2.3可以正確地將備份sql寄送到我設的信箱
但是,用apache 2.2.3以上的版本在備份時,會說'無法送出郵件'...請問這問題該怎麼解決 ~_~我尚未研究出來...
張貼留言