藉助於開源百度雲客戶端`bypy`實現將網站備份的數據上傳至網盤存儲。 ...
原文鏈接: 克裡斯的小屋——網站備份到百度雲
引言
網站備份真的很重要,前段時間已經被坑過一次了,幸好數據沒有完全丟,勉強恢復了,雖然丟失了幾篇文章。之前一直是每隔幾天手動備份一下重要的數據,然後下載到本地。但是有時候會忘記備份這件事,所以,自動進行備份就很有必要了。當然,要解決自動備份問題比較簡單,些許腳本就能解決問題。問題是,總是把備份數據下載到本地,實在是比較麻煩(主要是浪費校園網流量!)。所以,本文就結合開源的bypy
百度雲客戶端,實現每天凌晨自動備份數據後同步到百度網盤的功能!
準備工作
- 安裝
requests
模塊:bypy
依賴這個模塊:sudo pip install requests
- 安裝
bypy
百度雲客戶端:sudo pip install bypy
- 配置客戶端:
- 在終端中輸入
bypy info
,根據提示打開鏈接,並將授權碼paste
回終端,然後回車; - 使用
bypy list
測試查看網盤文件:實際的查看的是我的應用數據/bypy
目錄
root@localhost:~# bypy list Encoding for StdOut: ANSI_X3.4-1968 /apps/bypy ($t $f $s $m $d): D site-backup 0 2016-07-02, 02:51:14
腳本之旅
- 在編寫自動備份腳本前,需要知道究竟哪些目錄比較重要,值得上傳。此外,還應當瞭解
mysql
資料庫備份的方法。好在這些都比較簡單! - 我自己伺服器上主要需要備份的目錄有以下幾個:
wordpress
:這個是博客網站的文件夾,內容當然很重要,尤其是很多的媒體資源!apache2
:這個是apache2
伺服器配置目錄,這個也很重要。custom_scripts
:這個目錄是平時會更新的腳本合集,自然也應當定期備份咯。shadowsocks
:這個目錄存放的是shadowsocks
相關的配置文件以及監控腳本,其實不用每次都備份,不過不太大,所以順帶每天備份下好啦!- 除了要備份的目錄外,還有
wordpress
資料庫需要備份,備份的命令非常簡單:mysqldump -uroot -ppassword database_name > data.sql
。 - 在備份完了後,只需要使用
bypy
將備份好的數據上傳到百度雲即可。 - 以下是為此編寫的腳本,可以自動完成指定的備份和上傳數據的任務:
#!/bin/bash
# Directories you want to backup
back_dirs="/root/custom_scripts /root/shadowsocks /var/www/wordpress /etc/apache2"
echo "========================================================================"
echo "Backup begin:" `date "+%Y-%m-%d %H:%M:%S"`
# Where to put the backup data.
dest_dir="/root/site-backup"
date_postfix=`date "+%Y%m%d"`
# Step A: create directory for backups
echo -n "Prepare to bakcup..."
if [ ! -d $dest_dir ]; then
/bin/mkdir -p $dest_dir
else
/bin/rm -r $dest_dir
/bin/mkdir -p $dest_dir
fi
echo "done!"
# Step B: stop website
echo -n "Stop web server apache..."
/etc/init.d/apache2 stop >/dev/null
echo "done!"
# Step C: backup each directories we've got
for dir in $back_dirs
do
name=${dir##*/}
echo -n "Backup directory: $dir, please wait..."
archive_name="$name-$date_postfix".tar.gz
/bin/tar -czpf $dest_dir/$archive_name $dir 2> /dev/null
echo "done!"
done
# Step D: backup database
echo -n "Backup database...."
/usr/bin/mysqldump -uuser -ppassword wordpress > $dest_dir/"wordpress_"$date_postfix.sql
echo "done!"
# Step E: restart website
echo -n "Start web server apache..."
/etc/init.d/apache2 start >/dev/null
echo "done!"
# Step F: upload backup data to Baidu Cloud
echo "Upload backup data to Baidu Cloud..."
remote_dir="site-backup/$date_postfix"
/usr/local/bin/bypy mkdir $remote_dir
/usr/local/bin/bypy upload $dest_dir $remote_dir
# Step G: clean backups.
echo -n "Clean backups..."
/bin/rm -r $dest_dir
echo "done!"
echo "Backup complete:" `date "+%Y-%m-%d %H:%M:%S"`
echo ""
exit 0
測試腳本
- 為了方便起見,首先給腳本賦予可執行許可權,然後鏈接到
/usr/local/bin/site-backup
上,這樣就可以在任何目錄下啟動備份命令了! - 以下是測試執行的效果截圖:
- 以下是上傳到百度雲中的備份文件截圖:
定時備份
- 將任務添加到
crontab
即可(需要註意的是伺服器與國內有12個小時的時差存在):
# at 4 a.m every day
0 16 * * * /usr/local/bin/site-backup >> /var/log/site-backup.log
尚待改進
- 由於當前網站備份出來的數據並非很大,所以採用了比較傳統的完全備份再上傳的方法;後期可以改進成每隔幾天做一次完整備份,然後每天做增量備份的方式;
- 並不需要在百度網盤中保存太多的備份數據,後期需要增加新的功能,用於刪除太舊的備份數據,只保留最近一周或者若幹天的備份即可。