看到美美的網站嗎?其實對於上線中的網站,自動備份是很基本的需求。只要有資料部份,就必需要有備份,畢竟如果網站毀損,要救回來必定要花大錢,還不一定能救得回來。
上圖摘自 https://heavenfortress.com ,超級推薦一覽!!!
目前維運的網站是採用 WordPress 的方案,雖然主機商有提供自動備份的解決方案,但是因為要多花錢,且備份容量只有 1GB,不是很夠用,所以想自己建立一個自動化備份的方式。
WordPress 備份什麼?
WordPress 主要依賴 mysql 及 php 檔案目錄執行,所以如果需要備份,主要就是定期備份 『mysql 資料庫』及『整個網頁目錄』兩者。
這樣假設網站資料毀損(WordPress 在更新前,都會建議大家先備份整個網站),可透由這兩個備份項目將網站快速復原。
以下將介紹使用 rsync 備份的方式, rsync 的好處在於可以比對目的端及來源端檔案的差異,並且只更新有變化的部分,對於網路傳輸非常有效率。
如果是使用傳統的 scp 的話,因為是完整覆蓋檔案,會一次傳輸整個資料夾,但用了 rsync 之後,只會把有變化的檔案傳輸過去,非常節省流量。
為什麼要自己備份?
- 實行異地備援,雞蛋不要放在同個籃子上,再怎麼穩定的(雲端)硬碟也有出問題的可能。
- 採用主機商的備援方案,我們很難掌握實際上資料被放到哪裡。
- 確保我們手邊有完整資料,而不是全部資料都在網路上。
- WordPress 也有自己的備份插件,但是通常要另外收費,且有容量上限。
不過備份自己來,就必須要自己寫腳本、準備空間處理備份硬碟的問題,所以這裡要評估是否要自己來😂。
需求
主機商端:
- 主機商提供的伺服器需支援 Shell 及 SSH 存取權限。
(這一步非常重要,因為 rsync 備份需要 SSH shell 存取)。 - mysql 登入的帳號密碼,可以從 wp-config.php 找。
- 主機的網路流量沒有使用限制為佳。
本地端:
- Linux 系統為佳,較易設定及安裝必要套件。
(其實 Windows 也能跑,但是步驟會更複雜一點,改天寫一篇教學) - 足夠大的備份用硬碟或是雲端硬碟。
- 支援 ssh 指令。
- 支援 rsync 指令。
- 足夠大的網路頻寬。
步驟
- 確認伺服器的 SSH private key 已經設定完成,且打通 Shell 存取權限。
- 下載伺服器的 SSH private key 至本地端,通常會把 key 放到 ~/.ssh 資料夾底下。
- 遠端登入到伺服器,匯出 MySQL 資料庫。
- 利用 rsync 將檔案備份至本機端。
- 資料夾打包成壓縮檔,並將檔名命名為備份日期。
- 將壓縮檔搬移至預備份的雲端硬碟/NAS 上。
指令檔案
以下說明請參閱註解
#!/bin/bash #設定 private key的位置 private_key=~/.ssh/my_key.id_rsa #設定 SSH 欲登入的帳號及伺服器 target_host=my_account@heavenfortress.com #設定要拿來同步的資料夾位置 mirror_dir="/Volumes/Samsung_T5/heavenfortress_mirror" #設定要拿來存放備份檔案的資料夾位置 gdrive="/Volumes/GoogleDrive/我的雲端硬碟/天界之舟/heavenfortress.com.bak" #設定備份檔檔案名稱,這裡會帶日期 target_file_name=/Volumes/Samsung_T5/heavenfortress.com.`date +%Y%m%d`.zip #登入遠端,並將目前的資料庫複製出來 ssh -i $private_key $target_host 'mysqldump -p"資料庫密碼" -u 資料庫帳號 資料庫名稱 > sql_backup/www.sql' mkdir -p $mirror_dir #將剛剛的資料庫同步至本地端 rsync -e "ssh -i $private_key" --progress -aHv $target_host:~/sql_backup $mirror_dir #將整個網頁資料夾 www 同步至本地端 rsync -e "ssh -i $private_key" --progress -aHPv --del $target_host:~/www $mirror_dir #將同步好的資料夾壓縮成 zip 檔案,並且命名帶上日期 zip -yr -9 $target_file_name $mirror_dir #將壓縮檔移動至存放備份檔的資料夾中 mv $target_file_name "$gdrive"
腳本自動化處理
有幾種方法,搭配上述的腳本,就可以每日/週/月將整個網站備份到我們想要的地方了!!!
- 使用 crontab 定期執行腳本,可以通過以下方式設定。
crontab -e
- 使用 Jenkins 或其他套件管理任務( 可以用 Docker image 或是自己抓 Jenkins 來跑)
延伸資料
Rsync、crontab、ssh、jenkins 用法及詳細介紹~敬請期待。
如果有任何想法或是問題,非常歡迎留言/email 討論喔!
文章標籤
全站熱搜

太專業了!好不容易架好網站,備份真的很重要,萬一救不回來真的會哭哭~
真的,很多資料都要備份,一切都是為了避免『無常』...
感謝首陽專業的分享:)
謝謝劈山的回饋😊
謝謝首陽的分享~ 首陽是專業網站達人,有首陽就是滿滿的放心~
感謝白獅子的暖心回饋😊 做好備份才能放心睡覺😂
電腦程式真得超動腦力滴,首陽的部落格背景也換了,變得好看與簡單明瞭~~~整個搞錯了重點XD
哈,渡渡看得真仔細😂開心版面改了被發現。 有任何版面的建議也歡迎討論👍
感謝首陽分享🙏 果然是專業人士的福音 寫的讓人非常明瞭 非專業的我都明白 只是平凡的我都不懂😄
謝謝軍師問路暖心的回饋❤️ 會再想想怎麼寫得更好懂些 目標:阿嬤也能懂😊