Ssh

使用 rsync 將 4 個不同的 VPS 備份到用於儲存備份的第五個 VPS

  • July 30, 2017

假設我有 4 個 VPS。在每一個中,以下 cron 命令每週執行一次,用於本地備份:

0 0 * * 6 zip -r /root/backups/dirs/html-$(date +\%F-\%T-).zip /var/www/html
1 0 * * 6 find /root/backups/dirs/* -mtime +30 -exec rm {} \;

0 0 * * 6 mysqldump -u root -pPASSWORD --all-databases > /root/backups/db/db-$(date +\%F-\%T-).sql
1 8 * * 6 find /root/backups/db/* -mtime +30 -exec rm {} \;

我希望將每個本地備份的副本(來自 4 個 VPS 中的每一個)發送到第五個 VPS中,我將用作中央備份環境。發送應盡可能安全(在合理範圍內)。

如何使用 rsync 自動(也有計劃地)完成這項工作?

(或者可能是SCP?)

假設每個備份都是一個文件(通過歸檔上面的兩個文件),SCP將比rsync更有效,因為它除了傳輸文件之外所做的整體工作更少。

就自動化而言,您需要進行設置,以便:

  1. 第五個 VPS 可以連接到其他 4 個,而無需密碼作為可以讀取備份的使用者(管理稍微容易,但編碼更難)。
  2. 其他四個 VPS 可以連接到第五個而不需要密碼,最好每個都有一個單獨的帳戶(稍微難以管理,但更容易編碼)。

兩者的首選方法通常是未加密的 SSH 密鑰。完成後,您可以設置一個 cron 作業(在第 1 個 VPS 上,或在第 2 個其他 VPS 上),將最新備份傳輸到所需位置。

這是第二個選項的快速而骯髒的 shell 腳本,它將最新的文件從目錄複製到遠端系統:

#!/bin/bash
file=`ls -t "${1}" | head -n 1`
scp -pCB "${1}"/"${file}" ${2}

使用儲存備份的目錄的路徑作為第一個參數執行該命令,並將user@host:/path指向第五個 VPS 上的位置的字元串作為第二個參數將最近的備份從本地系統複製到第五個 VPS。

SCP的-p選項將保留 mtime(因此您仍然可以使用相同的find命令來精簡舊備份),-C啟用壓縮(這可能會或可能不會提高性能,並-B防止它提示任何內容。

引用自:https://unix.stackexchange.com/questions/379730