VPSが4つあるとしましょう。それぞれで、次のcronコマンドはローカルバックアップのために週に1回実行されます。
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のそれぞれで)各ローカルバックアップのコピーを次に送信したいと思います。5番目のVPS、中央バックアップ環境として使用します。転送はできるだけ安全でなければなりません(合理的な範囲内)。
rsyncを使用してこのタスクを自動的に(スケジュールに従って)どのように実行できますか?
(それともSCPですか?)
ベストアンサー1
各バックアップがファイルであると仮定すると(上記の2つのファイルをアーカイブして)、SCPと比較される同期これは、ファイルの転送に加えて、全体的に作業量が少ないためです。
自動化が行われる限り、次のように設定する必要があります。
- 5番目のVPSはバックアップを読むことができるユーザーで、パスワードなしで他の4つのVPSに接続できます(管理は少し簡単ですが、コーディングするのは難しいです)。
- 他の4つのVPSはパスワードなしで5番目のVPSに接続できます。それぞれに別々のアカウントを使用することをお勧めします(管理は少し難しいですが、コーディングは簡単です)。
どちらも好む方法は通常暗号化されていないSSHキーです。完了したら、クローンジョブ(1の場合は5番目のVPS、2の場合は4つのVPS)を設定して、最新のバックアップを希望の場所に転送できます。
以下は、ディレクトリ内の最新のファイルをリモートシステムにコピーする2番目のオプションのための迅速で汚れたシェルスクリプトです。
#!/bin/bash
file=`ls -t "${1}" | head -n 1`
scp -pCB "${1}"/"${file}" ${2}
バックアップが格納されているディレクトリパスを最初のパラメータとして指定し、5user@host:/path
番目のVPSの場所を指す文字列を2番目のパラメータとしてこのコマンドを実行すると、ローカルシステムの最新のバックアップが5番目のVPSにコピーされます。
-p
SCPオプションはmtimeを保存し(同じコマンドを使用して以前のバックアップをfind
縮小することができます)、-C
圧縮を有効にし(パフォーマンスが向上または改善されない可能性があります)、-B
メッセージが表示されないようにします。