Linux自動備份大容量網站數據到七牛雲存儲:秋水逸冰backup.sh腳本+七牛qshell工具
來自專欄澱粉月刊5 人贊了文章
關於站點備份的二三事相信各位站長也沒少折騰過,目前市面上普遍採用的方式大體有兩種,一種是用多備份這樣的第三方服務,另一種則是利用腳本定時打包網站數據及資料庫後上傳到Dropbox、Google Drive之類的雲端硬碟。兩種方案都可以完全做到免費,但後者由於存儲在網盤,存在容量限制(百度雲雖然容量大,但拿來當備份也比較少見,因為我們購買的VPS一般都是國外主機,沒有速度優勢。另外也存在上傳下載的限速問題)。今天居正針對第二種方案,給出兩套服務儘可能完美的解決站點備份的問題。它們的大名想必各位站長也不會陌生:秋水逸冰backup.sh腳本和七牛qshell工具。
更多有關網站技術的教程可參考:
「保住命根子」 VPS網站數據備份教程(1):backup.sh
由SQL注入(或資料庫許可權)滲透WordPress站點的一些手法Linux伺服器磁碟掛載:讓空餘的大硬碟VPS不再吃灰
一、七牛服務的配置部分
①創建空間
註冊:https://portal.qiniu.com/signup?code=3lotum461pf82 (我的aff,如果還沒有註冊並且不介意的話可以點一下啦
)
登錄:https://portal.qiniu.com
由於我們只用於備份,所以只要看存儲空間的價格就行了。七牛提供10G的免費空間,這個大小對於一般站點的備份是足夠的。
假如我們的網站數據文件是500MB/個,天天備份,那麼達到10G的大小則是20天,我們可以在空間裡面設置自動刪除20天之前的備份文件,這樣就總也不會超出10G。
按照以下步驟創建一個用於備份的空間:
1.點擊左側「對象存儲」。
2.點擊「新建存儲空間」。
3.在「存儲空間名稱」中輸入想創建為備份用空間(bucket)的名稱。這個名稱請記下來,我們之後有用。
4.在「存儲區域」裡面選擇一個地區。一般離你的VPS機房越近越好,美國的機器建議選北美速度會比較快。但這裡由於華南減價居正就選華南了,反正用於備份對速度速度要求也沒那麼高。
5.在「訪問控制」裡面選擇「私有空間」。畢竟我們不想讓自己的備份文件被別人下載到。
6.點擊「確定創建」。
如下:
在這裡我們的空間就創建好了。七牛還會提醒你進行綁定域名等後續操作,不過由於我們的空間只是用來放備份文件的,故不需要設置這些CDN相關的東西。
②配置qshell
七牛提供一個支持Linux、macOS、Windows平台的開發者工具,通過調用API在VPS上操作七牛空間。
在這裡下載對應版本/系統位數的qshell:https://developer.qiniu.com/kodo/tools/1302/qshell
附:查看Linux系統位數的方法:
1. ls / #如果有lib64或這個目錄,那操作系統就是64位的
2. getconfig LONG_BIT 若輸出32即為32位系統,64為64位系統32位的系統中int類型和long類型一般都是4位元組,64位的系統中int類型還是4位元組的,但是long已變成了8位元組。inux系統中可 用」getconf WORD_BIT」和」getconf LONG_BIT」獲得word和long的位數。64位系統中應該分別得到32和64。3. uname -a中若為X86示意為64位系統,i386等位32位系統refer to:http://blog.51cto.com/wbwk2005/423465
以64位的系統為例:
wget http://devtools.qiniu.com/qshell-v2.1.8.zip #利用wget下載qshell工具
unzip qshell-v2.1.8.zip #解壓cp qshell-linux-x64 /usr/bin/qshell #將文件複製到bin目錄下,這樣在任何地方都能執行qshell命令
chmod +x /usr/bin/qshell #設置可執行許可權
然後在七牛後台取得自己密鑰的AccessKey和SecretKey,保存下載備用:
最後在VPS上執行此命令授權:
qshell account 你的AccessKey 你的SecretKey
#例如居正的是:qshell account _Sb-mV19gxrZ2E5mh2ERUHjx9yZ1O-5kU5Jo0lB4 xxxx2ERUHjx9yZ1O-5xxx
二、配置backup.sh
秋水逸冰的backup.sh是目前市面上最好用的Linux一鍵備份腳本之一。
由於backup.sh默認只支持gdrive和ftp備份,居正在這裡進行了相應的修改使其能夠備份文件到七牛(這裡採用了qshell rput系列命令,參考),並且去除了備份到gdrive的功能)。
安裝backup.sh腳本(文字修改自秋水逸冰官網):
1、下載該腳本並賦予執行許可權
wget --no-check-certificate https://gitee.com/juzheng/source/raw/master/backup_qiniu.sh -O backup.shchmod +x backup.sh
2、修改並配置腳本
請使用 vim 或 nano 等工具來修改。
關於變數名的一些說明:
ENCRYPTFLG (加密FLG,true 為加密,false 為不加密,默認是加密)
BACKUPPASS (加密密碼,重要,務必要修改)LOCALDIR (備份目錄,可自己指定)TEMPDIR (備份目錄的臨時目錄,可自己指定)LOGFILE (腳本運行產生的日誌文件路徑)BUCKET (七牛的容器名字,剛才創建的時候填的)
MYSQL_ROOT_PASSWORD (MySQL/MariaDB/Percona 的 root 用戶密碼)
MYSQL_DATABASE_NAME (指定 MySQL/MariaDB/Percona 的資料庫名,留空則是備份所有資料庫)※ MYSQL_DATABASE_NAME 是一個數組變數,可以指定多個。舉例如下:MYSQL_DATABASE_NAME[0]="phpmyadmin"MYSQL_DATABASE_NAME[1]="test"
BACKUP (需要備份的指定目錄或文件列表,留空就是不備份目錄或文件)
※ BACKUP 是一個數組變數,可以指定多個。舉例如下:
BACKUP[0]="/data/www/default/test.tgz"BACKUP[1]="/data/www/default/test/"BACKUP[2]="/data/www/default/test2/"
LOCALAGEDAILIES (指定多少天之後刪除本地舊的備份文件,默認為 7 天)
DELETE_REMOTE_FILE_FLG (刪除FTP 上的備份文件 FLG,true 為刪除,false 為不刪除)FTP_FLG (上傳文件至 FTP 的 FLG,true 為上傳,false 為不上傳)
FTP_HOST (連接的 FTP 域名或 IP 地址)FTP_USER (連接的 FTP 的用戶名)FTP_PASS (連接的 FTP 的用戶的密碼)FTP_DIR (連接的 FTP 的遠程目錄,比如: public_html)一些注意事項的說明:
1)腳本需要用 root 用戶來執行;
2)腳本需要用到 openssl 來加密,請事先安裝好;
3)腳本默認備份所有的資料庫(全量備份);4)備份文件的解密命令如下:openssl enc -aes256 -in [ENCRYPTED BACKUP] -out decrypted_backup.tgz -pass pass:[BACKUPPASS] -d -md sha1
5)備份文件解密後,解壓命令如下:
tar -zxPf [DECRYPTION BACKUP FILE]
解釋一下參數 -P:
tar 壓縮文件默認都是相對路徑的。加個 -P 是為了 tar 能以絕對路徑壓縮文件。因此,解壓的時候也要帶個 -P 參數。3、運行腳本開始備份
./backup.sh
腳本默認會顯示備份進度,並在最後統計出所需時間。
如果你想將腳本加入到 cron 自動運行的話,就不需要前台顯示備份進度,只寫日誌就可以了。這個時候你需要稍微改一下腳本中的 log 函數。log() { echo "$(date "+%Y-%m-%d %H:%M:%S")" "$1" echo -e "$(date "+%Y-%m-%d %H:%M:%S")" "$1" >> ${LOGFILE}}
改為:
log() { echo -e "$(date "+%Y-%m-%d %H:%M:%S")" "$1" >> ${LOGFILE}}
關於如何使用 cron 自動備份,這裡就不再贅述了 以 CentOS 6 來舉例說明。
修改文件 /etc/crontab,內容如下:
SHELL=/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binMAILTO=rootHOME=/root# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# | | | | |# * * * * * user-name command to be executed30 1 * * * root bash /root/backup.sh
以上表示,每天凌晨 1 點 30 分,root 用戶執行一次 backup.sh 腳本。
注意:一定要修改其中的 PATH 和 HOME 變數的值。尤其是 HOME 變數,qshell 命令能否正確執行,是要依賴於其配置文件的。默認用 root 配置的話,其配置文件夾應該是 /root/.qshell/ ,所以要更改 HOME 的值。可以在七牛空間的內容管理裡面看到已經備份的文件,同時可以下載:
三、七牛空間:備份文件生命周期設置
最後我們需要在空間裡面設置自動刪除20天之前的備份文件,使容器總大小不會超出10G的免費額度。
在生命周期裡面點擊新建規則:
輸入規則名字。然後在下面把「刪除文件」打開,設置刪除時間為20天:
OK,以上就是給大家帶來的「Linux自動備份大容量網站數據到七牛雲存儲:秋水逸冰backup.sh腳本+七牛qshell工具」教程。如果你有任何疑問請在下面評論區提出!
本文首發於澱粉月刊,作者 居正。
Linux自動備份大容量網站數據到七牛雲存儲:秋水逸冰backup.sh腳本+七牛qshell工具 - 澱粉月刊推薦閱讀:
※體驗AWS的VPS
※Hexo建站使用Git部署到VPS
※VPS哪個控制面板好用?
※Vultr 日本2.5刀補貨!
※【VULTR小白篇】手把手教你註冊賬號及開通VPS實例