CentOS 5 64bit Backup Plan
檢查版本指令:
#cat /etc/redhat-release
#uname -a
至少備份以下目錄:
/boot
/etc
/home
/root
/usr/local (或 /opt 及 /srv 等)
/var (註:這個目錄當中有些暫存目錄則可以不備份,但因空間充足,又不是太占空間,也就整個備份了)
最多資料的是 home 下的 VMs (若有裝 virtualbox 的話)。
備份完或備份前的檔案匣大小檢查:
以下引文區塊引用自此:
# du [-ahskm] 檔案或目錄名稱
參數:
-a :列出所有的檔案與目錄容量,因為預設僅統計目錄底下的檔案量而已。
-h :以人們較易讀的容量格式 (G/M) 顯示;
-s :列出總量而已,而不列出每個各別的目錄佔用容量;
# 直接輸入 du 沒有加任何參數時,則 du 會分析『目前所在目錄』
注意 crond 的設定:
直接放 /etc/crontab 無法正常在設定的時間執行備份程式,於是要把備份用的可執行檔(以 #!/bin/sh 文字開頭),移至 /etc/cron.daily 目錄下,然後更改 /etc/crontab 的 cron.daily 那行的執行時間,再重新跑 #service crond restart 指令,讓 crond 能讀取到最新設定。目前 crond.daily 放有自設的 bandwidthd.sh 及 rsync2backup 程式(均以 #!/bin/sh 文字開頭,並給予可執行 x 權限),若有資料庫備份需求,可再放 mysqldump 執行程式。
以下為每天的 mysqldump 程式:
#!/bin/sh
mysqldump -u root -pPASSWORD database-name1 > /root/database-name1.sql
mysqldump -u root -pPASSWORD database-name2 > /root/database-name2.sql
注意 -p 選項與密碼中間不可有空格。
將此程式放在 /etc/cron.daily 中,並執行 service crond restart 以重啟 crond 服務將備份程式載入排程。
還原資料庫:
gunzip sqlbackup.gz
mysql -u root -p db_name < backup.sql
mysqlbackup script:
#!/bin/sh
# 修改資料庫連線的設定值
myHost="localhost"
myUser="username"
myPass="password"
myDB="dbname"
# 修改備份檔儲存位置與檔名
backup_path="/root/"
# 檔名加上日期 20130114 以避免蓋掉前一天的
date=$(date +"%Y%m%d")
sql_file=$backup_path"joomlaDB."$date".sql"
echo "mysqldump..."
mysqldump -h $myHost -u $myUser -p$myPass $myDB > $sql_file
echo $sql_file
echo "gzip..."
gzip -f $sql_file
mysqlsync script:
用來同步 mysql 資料庫作備援用,亦可作為匯入 gz 檔的還原資料庫指令參考:
#!/bin/sh
# 修改資料庫連線的設定值
myUser="username"
myPass="password"
myDB="dbname"
# 修改備份檔儲存位置與檔名
backup_path="/root/"
# 檔名加上日期
date=$(date +"%Y%m%d")
sql_file=$backup_path"joomlaDB."$date".sql.gz"
echo "Importing..."
gunzip < $sql_file | mysql -u $myUser -p$myPass $myDB
echo "Done!"