文章目錄
- 概述
- 安裝bypy
- 同步文件
- 定時任務腳本
概述
之前自購了一臺阿里云服務器,系統鏡像為Ubuntu 22.04
, 并且搭建了LNMP開發環境(可以參考:《Ubuntu搭建PHP開發環境操作步驟(保姆級教程)》)。由于項目運行中會產生附件(比如圖片、視頻等二進制文件),一般情況下可以把網站的附件存儲到OSS上,但是,OSS需要花錢,由于項目比較小,而且本著少花點錢的原則,還是把附件就放在了網站服務器上。那么,就需要考慮一個問題,附件文件的備份問題。如果服務器遭受攻擊,那么有可能附件就找不回來了。于是乎,我就在想,能不能在Ubuntu服務器上免費的實現文件備份。最終,我發現了這個神器:bypy。
安裝bypy
# 切換到root用戶
sudo -i# 安裝 pip3 (如果已安裝,則跳過此步驟)
apt install python3-pip# 安裝依賴
pip3 install requests (如果已安裝,則跳過此步驟)# 安裝bypy
pip3 install bypy # 如果最新版不能用,可以使用1.6.10版本: pip3 install bypy==1.6.10# 獲取百度網盤的授權
bypy info
如果報錯:Command ‘bypy’ not found, did you mean ,應該是沒有切換到root用戶
正常情況的話,就會出現下面的內容:
Please visit:
https://openapi.baidu.com/oauth/2.0/authorize?client_id=q8WE4EpCsau1oS0MplgMKNBn&response_type=code&redirect_uri=oob&scope=basic+netdisk
And authorize this app
Paste the Authorization Code here within 10 minutes.
Press [Enter] when you are done
訪問提示的鏈接,就會打開百度網盤的授權頁面,登錄你的百度網盤賬號,然后授權即可。
接下來,把上面的授權碼復制下來,粘貼到服務器的終端:
同步文件
基本操作的命令如下:
# 上傳服務器當前目錄下的文件到百度云盤
bypy upload# 下載百度網盤上的內容到服務器的當前目錄
bypy downdir# 比較服務器當前目錄和網盤的文件是否一致
bypy compare# 查看網盤的文件列表
bypy list# 運行時添加-v參數,會顯示進度詳情。
# 運行時添加-d,會顯示一些調試信息。
實際演示一下:
隨便找個目錄,創建兩個測試文件,然后運行 bypy upload
,接下來,去到 百度網盤-我的應用數據-bypy
文件夾查看:
切換一個目錄,運行 bypy downdir
:
上傳到網盤的指定目錄:bypy upload ./ 2024/123/456/
會將當前目錄下的所有文件上傳到網盤的 apps >bypy >2024>123>456
目錄下,別忘了456/
后面的/
特別說明:
- 增量備份:對于網盤已存在的文件,如果文件沒有變化,再次同步會跳過。
- 單向備份:對于已同步過的文件,如果刪除了服務器上的文件,并不會刪除百度網盤上的文件。
定時任務腳本
然后,通過crontab
寫一個定時任務,就可以實現自動備份服務器上的文件到自己的網盤了,再也不怕服務器的大容量文件丟失了。
備份數據庫的腳本 :
# export_sql.shmysqldump -u root -p123456 dbname > /home/admin/www/sql/dbname.sql
備份SQL文件和圖片文件的腳本,圖片文件按照年/月/日
的目錄存放,備份昨天的:
# upload_img_to_bdwp.shsqlpath=/home/admin/www/sql
cd ${sqlpath}
echo ${sqlpath}
nohup bypy upload ./ sql >/dev/null 2>&1 &# 獲取昨天的日期
yesterday=$(date -d "yesterday" +"%Y/%m/%d")
imgpath=/home/admin/www/img/file_${yesterday}
if [ ! -d ${imgpath} ]; thenecho "當前日期的圖片文件目錄不存在"exit 0
ficd ${imgpath}
echo ${imgpath}
nohup bypy upload ./ ${yesterday} >/dev/null 2>&1 &
定時任務腳本crontab -e
:
# 每天02:00 備份數據庫
0 2 * * * sh /root/shell/export_sql.sh# 每天03:00 備份文件到百度網盤
0 3 * * * sh /root/shell/upload_img_to_bdwp.sh