Linux 每日備份到第二台伺服器教學! 含安裝ftp server、crontab、備份腳本

一直以來都想要有一個完美的網站備份的規劃,畢竟手動備份真的無法很勤勞的定時去備份。目前比較好的網站備份規劃,就是租一台大硬碟伺服器(VPS或實體主機),在裡面安裝ftp server,然後透過備份腳本,讓他自動每日幫你備份。

  • 主機環境: Linux Centos
  • 網站環境軍哥lnmp一鍵安裝包(安裝教學:)

一、在備份伺服器中,安裝vsftpd、Iftp。

要把需要備份的資料上傳到備份伺服器中,一定要安裝FTP server。在這邊我們用比較熱門的vsftpd軟體套件。

1、vsftpd安裝指令:

1.yum -y install vsftpd
2.touch /etc/vsftpd/chroot_list
3.chkconfig vsftpd on

二、安裝完vsftpd後,開啟port 21。這樣才不會造成登入FTP,被防火牆擋在外面,造成登入失敗。

1.iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 21 -j ACCEPT
2.service iptables save

三、開啟vsftpd

service vsftpd start

四、安裝Iftp

yum install lftp

2、新增FTP使用者

新增使用者名稱(藍色字體表示你想要新增的使用者名稱,可自行設定)

useradd xxxx

更改使用者的密碼(紅色字體是你剛剛新增的使用者名稱)

userwd xxxx

之後會有這行指令,這邊你只需要輸入你要的密碼即可。為了安全因素,在SSH中你輸入任何資料,都不會顯示。

Changing password for user xxxx.
New password:

3.在網站伺服器中,上傳備份腳本!

如果你是使用軍哥lnmp一鍵包,那備份腳本在/root/lnmp1.2-full/tools中。

如果你沒有備份腳本,我這邊有軍哥lnmp一鍵包中的備份腳本,我已經把註解都繁體化,依照你的伺服器需求,填入相關數值即可。

把備份腳本上傳到隨機目錄即可,只要你知道備份腳本在哪個目錄中就可以了。

軍哥lnmp一鍵包備份腳本:Google雲端下載

以下只需把藍色字體的資料更改成你自己的即可

#!/bin/bash

#Funciont: Backup website and mysql database
#Author: licess
#Website: http://lnmp.org

#IMPORTANT!!!Please Setting the following Values!

Backup_Home=“/home/backup/" #你的網站伺服器端的備份目錄
MySQL_Dump="/usr/local/mysql/bin/mysqldump" 
######這邊設定你要備份的網站目錄######
Backup_Dir=(“/home/wwwroot/xxxx.com" “/home/wwwroot/xxxx.com") #這邊設定你要備份的網站目錄

######你需要備份的資料庫(輸入資料庫名稱即可)######
Backup_Database=(“xxxx“)

######~Set MySQL UserName and password~######
MYSQL_UserName=’資料庫帳號
MYSQL_PassWord=’資料庫密碼

######啟動FTP備份######
Enable_FTP=0
# 0=啟動; 1=不啟動
######輸入你的FTP資料######
FTP_Host=’127.0.0.1:21
FTP_Username=’你的FTP帳號
FTP_Password=’你的FTP密碼
FTP_Dir="你想要把備份資料在FTP的哪個目錄?"

#Values Setting END!

TodayWWWBackup=www-*-$(date +"%Y%m%d").tar.gz
TodayDBBackup=db-*-$(date +"%Y%m%d").sql
OldWWWBackup=www-*-$(date -d -3day +"%Y%m%d").tar.gz
OldDBBackup=db-*-$(date -d -3day +"%Y%m%d").sql

Backup_Dir()
{
Backup_Path=$1
Dir_Name=`echo ${Backup_Path##*/}`
Pre_Dir=`echo ${Backup_Path}|sed ‘s/’${Dir_Name}’//g’`
tar zcf ${Backup_Home}www-${Dir_Name}-$(date +"%Y%m%d").tar.gz -C ${Pre_Dir} ${Dir_Name}
}
Backup_Sql()
{
${MySQL_Dump} -u$MYSQL_UserName -p$MYSQL_PassWord $1 > ${Backup_Home}db-$1-$(date +"%Y%m%d").sql
}

if [ ! -f ${MySQL_Dump} ]; then
echo “mysqldump command not found.please check your setting."
exit 1
fi

if [ ! -d ${Backup_Home} ]; then
mkdir -p ${Backup_Home}
fi

type lftp >/dev/null 2>&1 || { echo >&2 “lftp command not found. Install: centos:yum install lftp,debian/ubuntu:apt-get install lftp."; }

echo “Backup website files…"
for dd in ${Backup_Dir[@]};do
Backup_Dir ${dd}
done

echo “Backup Databases…"
for db in ${Backup_Database[@]};do
Backup_Sql ${db}
done

echo “Delete old backup files…"
rm -f ${Backup_Home}${OldWWWBackup}
rm -f ${Backup_Home}${OldDBBackup}

if [ ${Enable_FTP} = 0 ]; then
echo “Uploading backup files to ftp…"
cd ${Backup_Home}
lftp ${FTP_Host} -u ${FTP_Username},${FTP_Password} << EOF
cd ${FTP_Dir}
mrm ${OldWWWBackup}
mrm ${OldDBBackup}
mput ${TodayWWWBackup}
mput ${TodayDBBackup}
bye
EOF

echo “complete."
fi

4.測試備份腳本是否可執行

填完備份腳本的資料後,就要來執行是否你填的資料都正確!

 

目錄切換至你放備份腳本的目錄(藍字為軍哥lnmp備份腳本存放目錄)

cd /root/lnmp1.2-full/tools

執行你的備份腳本!

sh backup.sh

在這邊如果他沒有出現錯誤訊息,基本上就代表你備份腳本執行成功,這時候就去你的備份伺服器看看有沒有網站的備份資料吧!

如果有錯誤訊息,可能是你資料填寫有誤或是防火牆有擋道,建議先關閉Linux防火牆再試試看。

5.安裝crontab,讓你伺服器定時執行備份腳本!

crontab是一個能讓你定時處理某件事情的軟體,所以我們就用這套軟體,來讓我們每天都自動執行一次我們的備份腳本!

事不宜遲,來安裝吧!

yum install vixie-cron crontabs

設定開機自動開啟crontab

chkconfig crond on

開啟crontab

service crond start

加入crontab定時任務(已每日凌晨3點執行為例,需要詳細時間設定教學可看:點我)

crontab -e

之後在按〈i〉進入編輯模式,輸入以下資料(藍字為軍哥lnmp備份腳本存放目錄)

0 3 * * * /root/lnmp1.2-full/tools

輸入完畢後,按下鍵盤的《ESC》,之後再輸入〈:wq〉再按下鍵盤的《Enter》,這樣你的crontab就設定完成了!

為了確定你有成功輸入crontab的定時任務,你可以輸入

crontab -l

這個指令來觀看你的crontab的任務列表, 如果什麼資料都沒出現,代表你剛剛沒有新增到crontab,再去重新把步驟五重新做一次吧!

 

如果以上都非常順利完成,那就代表你完成囉!

 

Bon

Bon

目前大二生,把經營網站當作興趣,只要看到什麼新奇、好用的東西都會分享在部落格中。如果你也喜歡我的文章,歡迎留言給我!

More Posts

2 Responses to Linux 每日備份到第二台伺服器教學! 含安裝ftp server、crontab、備份腳本

  1. yungkeLi 說道:

    感謝分享,VPS / 獨服 備份才是王道。
    crontab 定時任務,0 3 * * * /root/lnmp1.2-full/tools/backup.sh > /dev/null 2>&1 (* / 之間你少打一個空格)

發表迴響