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!"