[教學]Unix-like系統下利用crontab進行備份

phpBB Installation & Usage Support
phpBB 2 安裝於各類型作業平台之問題討論;外掛問題,請到相關版面依發問格式發表!
(發表文章請按照公告格式發表,違者砍文)

版主: 版主管理群

版面規則
本區是討論關於 phpBB 2.0.X 架設安裝上的問題,只要有安裝任何外掛,請到外掛討論相關版面按照公告格式發表。
(發表文章請按照公告格式發表,違者砍文)
主題已鎖定
flower
星球公民
星球公民
文章: 272
註冊時間: 2004-08-31 21:03
來自: 火星
聯繫:

[教學]Unix-like系統下利用crontab進行備份

文章 flower »

定時備份系統資料和資料庫是一件很重要的事
萬一有狀況發生 還可以把備份的資料還原
在此簡介一下 Unix-like 的作業系統下如何定時備份\r

常用的工具就是 crontab 簡單使用方法如下:
crontab -e (輯輯自己的定時排程)
crontab -l (查看自己的定時排程)
crontab -r (刪除自己的定時排程)

開始使用 crontab -e 編輯自己的定時排程 語法範例如下:
1 1 1 1 1 /root/run.sh

第一個字代表
數字範圍: 0 到 59 也可以使用*代表任何時間

第二個字代表
數字範圍: 0 到 23 也可以使用*代表任何時間

第三個字代表
數字範圍: 1 到 31 也可以使用*代表任何時間

第四個字代表
數字範圍: 1 到 12 也可以使用*代表任何時間

第五個字代表 星期幾
數字範圍: 0 到 6 (0 代表星期日) 也可以使用*代表任何時間

最後代表執行的指令 (最好寫出絕對路徑)


例如:
1 1 * * * /root/run.sh
代表每天的 1 時 1 分會執行 /root/run.sh 這個指令\r

30 1 1 * * /root/run.sh
代表每月的 1 日 1 時 30 分會執行 /root/run.sh 這個指令\r

*/6 * * * * /root/run.sh
代表每小時的 0分, 10分, 20分, 30分, 40分, 50分會執行 /root/run.sh 這個指令\r

0 */3 * * * /root/run.sh
代表每隔三個小時的 0 分會執行 /root/run.sh 這個指令\r


所以只要配合 MySQL 的指令就可以順利定時備份資料庫和網頁資料
假設 MySQL 的帳號是: test
假設 MySQL 的密碼是: password
假設 phpbb 的資料庫名稱: phpbb2
假設使用者 test 要存放備份的目錄為: /home/test/mysql

crontab 的設定如下:
0 5 * * * /home/test/mysql/backup.sh

/home/test/mysql/backup.sh 內容如下:\r
basedir="/home/test/mysql"
filename=`date +%Y%m%d`
cd $basedir
mysqldump phpbb2 -utest -ppassword --opt > "$filename"

然後再把 backup.sh 的權限設成可執行 700 or 755
這樣系統就會自動在每天早上5時整備份資料庫 並會依照每天的日期給與資料庫不同檔名
這樣就不怕明天的資料庫備份會把今天的蓋掉
如果怕檔案太多 還可以改成幾天或是以星期為單位備份
或是改變 date 的變數 可以 man date 得到更多的資訊

當然網頁資料也可以這樣備份 不過如果沒常在更改網頁內容
那就變更後手動備份就可\r

也可以將 ftp 指令放入 backup.sh 可以達成定時備份並將資料傳送到遠端\r

有錯誤請通知 謝謝 :D
linux_xp
星球公民
星球公民
文章: 34
註冊時間: 2004-03-02 23:58

文章 linux_xp »

我的方法是這樣的
OS:Fedora (core 1 or 2 都適用)

1.用root登入,執行crontab -e

2.接著會出現vi編輯器\r
這個檔就是在編輯root的例行性執行排程

3.寫入以下資訊
(假設每日凌晨5:00開始備份)
--------------------------------------
0 5 * * * /etc/rc.d/init.d/httpd stop
1 5 * * * tar -zcvf /root/sql-backup.tgz /var/lib/mysql
5 5 * * * /etc/rc.d/init.d/httpd start

4.存檔
下指令:/etc/rc.d/init.d/crond restart
重新啟動例行性排程,大功告成。


說明:
1.5點0分,停止apache
以避免備份途中有網友發表主題寫入資料庫,造成備份失敗。

2.5點1分,拷貝/var/lib/mysql/*
(就是資料庫實際存在的檔案)
用tar打包壓縮起來
存到/root/sql-backup.tgz這個檔
.tgz 是.tar.gz的另一種表示法,一種壓縮檔

3.5點5分,重新啟動apache,恢復服務

選擇5點,是因為那個時候,瀏覽的人最少
4點也是可以,不過Fedora在4點的時候
系統預設會進行例行性維護\r
若同時備份會操到硬碟

備份時,apache會停止服務5分鐘
這個是考慮到停止httpd和備份壓縮資料庫\r
需要一些cpu時間
若cpu夠快,可以縮短時間

儲存位置可以改,/root只是範例
我是直接把它存到samba的目錄裡頭\r
方便其它windows電腦直接網路芳鄰拷貝回來

單純只是把資料庫備份到server硬碟存成壓縮檔
並沒有意義,因為硬碟如果掛了,資料一樣會不見
還是得多一個步驟,拷回其它電腦才能達到備份目的
其實若有其它電腦也是24H開機的
可以透過samba互相自動備份\r

不過這個方法有一個缺點
就是每次備份檔名都一樣\r
像樓主那樣用變數的方式可能會比較好\r

crontab的詳細用法,可以參考這裡:
http://linux.vbird.org/linux_basic/0430cron.php

:mrgreen:
●架設主機作業系統:Linux (Fedora core 4)
●快速架站程式:Linux 內建
●主機性能:AMD 2500+、1024MB
●您的上網方式:ADSL 2M/512K
●您安裝的程式:Apache2 + php5 + MySQL4.1
●您的 phpBB2 版本:2.0.17
主題已鎖定

回到「phpBB 2 安裝與使用」