CentOS 6でRsyncを使用してサイトのオフサイトバックアップを作成する方法
ステータス: 廃止された
この記事は、もはやサポートされていないCentOSのバージョンについて説明しています。現在、CentOS 6を実行しているサーバーを運用している場合は、サポートされているバージョンのCentOSにアップグレードまたは移行することを強くお勧めします。
理由: CentOS 6は2020年11月30日にサポート終了(EOL)となり、以降はセキュリティパッチやアップデートを受け付けません。このため、このガイドはもはや維持されていません。
代わりにご覧ください:
このガイドは参考としてまだ有用かもしれませんが、他のCentOSリリースでは機能しない可能性があります。利用可能であれば、ご使用のCentOSのバージョン用に書かれたガイドを使用することを強くお勧めします。
以下のDigitalOceanチュートリアルは、rsyncを使用してローカルディレクトリをリモートディレクトリと同期する方法の一般的な概要を提供しているため、すぐに興味があるかもしれません。
- ローカルおよびリモートディレクトリを同期するためのRsyncの使用方法
紹介
この記事では、典型的なウェブホスティングシナリオで最も一般的なもの、つまりウェブサイトのファイルとデータベースデータをバックアップするための簡単な方法を提供します。ウェブサイトフォルダのフルデイリーバックアップを設定し、このデータをリモートサーバーにコピーする方法を説明します(これは別のVPSでも機能します)。また、増分変更をコピーするためのrsyncの例も設定します。最後に、MySQLデータベースのバックアップを設定します。ここで説明する手順では、いくつかの簡単なBashコマンド、rsync、およびバックアップをスケジュールするためのcronを使用します。例えば、データの例として、この記事に従ってWordpressをインストールできます。これによりWordpressが/var/www/wordpressディレクトリに配置され、MySQLデータベースwordpressが作成されます。そして、すべてのデータのバックアップを取得したいと考えています。
DigitalOceanは、バックアップとスナップショットを非常にうまく管理するための
バックアップには、増分バックアップとフルバックアップという2つの方法があります。フルバックアップはすべてのデータをコピーし、スナップショットは前回の更新以降の変更のみを処理します。
フルバックアップ
フルバックアップは通常、以下のことを行います:
- フォルダー内のすべてのファイルのアーカイブを作成する
- 結果のアーカイブをリモートサーバーにコピーしてください。
前述のとおり、私たちのデータは /var/www/wordpress ディレクトリに格納されます。バックアップフォルダーの場所を指定します。
mkdir -p /backup/wordpress上記のコマンドは、/backup ディレクトリと /backup/wordpress ディレクトリを作成します(存在しない場合)。私たちのデータの完全なスナップショットを作成するために、tarというLinuxツールを使用します。
tar -czf /backup/wordpress/initial_backup.tar.gz
/var/www/wordpresstarはfile initial_backup.tar.gzの中にgzipアーカイブをcreateします。冗長な出力(ファイル名のリスト)が必要な場合にはvフラグを追加することができます(その場合はtar -czvfになります)。このファイルをinitial_backup.tar.gzと名付けることで、これが初回のバックアップであることがわかります。tarでアーカイブされ、gzipフォーマットで圧縮されます。tarは、私たちが提供する引数をソースとして使用します。私たちの場合、/var/www/wordpressディレクトリをバックアップします。ファイルまたはフォルダで二つ以上の引数を渡すこともできます。
tar -czf /backup/cms_systems_backup.tar.gz /var/www/wordpress
/var/www/drupal /var/www/joomla最後のコマンドは、私たちのインストールされたすべてのCMSシステムをバックアップします。
さて、将来のバックアップについて、バックアップが行われた日付を追加したいかもしれません:
tar -czf /backup/wordpress/wordpress-`date '+%m%d%y'`.tar.gz
/var/www/wordpressさあ、今何があるか見てみましょう。
[root@Backup ~]# ls -l /backup/wordpress/
total 9760
-rw-r--r-- 1 root root 4995743 Apr 17 12:16 initial_backup.tar.gz
-rw-r--r-- 1 root root 4995743 Apr 17 12:25 wordpress-041713.tar.gz
[root@Backup ~]#
私たちは2つのファイルを持っています。一つはinitial_backupと呼ばれ、もう一つはwordpress-041713(この記事を書いている時点の2013年4月17日)と呼ばれています。さて、これを毎日スケジュールするために、crontabエントリを作成する必要があります。CrontabはLinuxのタスクスケジューラで、いつ何をするかを指定します。とにかく、crontabエディタを開きます。
EDITOR=nano crontab -eテキストエディタでcrontabファイルが開きます。デフォルトでは、DO CentOSイメージにはvimがエディタとして含まれており、設定が少し必要です。そのため、今回はnanoエディタというよりシンプルなエディタを使用しました。以下のようにデフォルトのエディタを使用することもできました。
crontab -e今、cronに毎日午前3時30分にバックアップを取るように指示する必要があります。その時間帯には、 hopefully あまりトラフィックがないことを期待しています。また、何かを見つけた場合には私たちにメールするように指示します。この内容をcrontabに入力します:
MAILTO=email@example.com
30 3 * * * /bin/tar -czf /backup/wordpress/wordpress-`date
+\%m\%d\%y`.tar.gz /var/www/wordpress
ファイルはCTRL-Xで保存し、YとEnterで確認します。上記のコマンドは、Linuxに毎日3:30にコマンドを繰り返すよう指示します。また、cronに結果をメールで送信するように設定しました。すべてが正常に行われたことのサインとして、メッセージが表示されます: /bin/tar: Removing leading `/' from member names。エラーが発生した場合、メッセージには詳細が含まれ、修正が可能です。これで、毎日のバックアップが準備完了で動作しています。
バックアップを別のリモートサーバーにコピーする
別のリモートサーバーにバックアップをコピーするために、scp(セキュアコピー)を使用します。まず、SSHキーを生成する必要があります。
ssh-keygenとりあえずパスフレーズは空のままで、/root/.ssh/id_rsa_backup キーファイル(またはルートで実行していない場合は /home/username/.ssh/id_rsa_backup)を使用できます。今、公開鍵の部分を確認できます:
cat .ssh/id_rsa_backup.pubSSHキーのこの公開部分をリモートサーバーに、authorized_keysというファイルにコピーする必要があります。私たちはすでにbackup.example.comというリモートサーバーとbackupというユーザーがいると仮定します。これは空の新しく作成されたDigitalOcean VPS(ドロップレット)になる可能性がありますが、ユーザーは事前に作成する必要があります。この部分は一度だけ行います。
scp .ssh/id_rsa_backup.pub
backup@backup.example.com:/home/backup/backup_key.pubバックアップユーザーのパスワードを求められます。ファイルをコピーしたので、次はそれを authorized_keys に追加しましょう。このユーザーがすでにファイルとフォルダーを設定しているとは限らないので、その情報を確認しましょう:
ssh backup@backup.example.com "mkdir -p /home/backup/.ssh"
ssh backup@backup.example.com "chmod 700 /home/backup/.ssh"
ssh backup@backup.example.com "touch /home/backup/.ssh/authorized_keys"
ssh backup@backup.example.com "chmod 600 /home/backup/.ssh/authorized_keys"
ssh backup@backup.example.com "mkdir -p /home/backup/backups"
上記のいくつかのコマンドは、SSHが動作するためのディレクトリを作成しました(存在しない場合)、およびバックアップが機能するために必要なauthorized_keysファイルも作成しました。私たちはまた、ファイルを保存するためのbackupsディレクトリを作成しました。残るのは、私たちの公開鍵をそのファイルにコピーすることです。
ssh backup@backup.example.com "cat /home/backup/backup_key.pub >>
/home/backup/.ssh/authorized_keys"これで、将来のためにこのキーを使って物をコピーできます。
では、バックアップファイルをあちらにコピーしましょう:
scp -i .ssh/id_rsa_backup
/backup/wordpress/wordpress-041713.tar.gz
backup@backup.example.com:/home/backup/backupsもし私たちのキー設定が正しければ、ファイルはコピーされ、パスワードを要求されることはありません。実際にファイルがそこにあるか確認できます:
ssh backup@backup.example.com "ls -l /home/backup/backups"では、このアクションもcrontabにスケジュールできます。crontabエディタを再度起動してください。
EDITOR=nano crontab -eバックアップラインを変更します: バックアップアーカイブが作成されるときにコピーする情報を追加したいと思います。したがって、新しいコマンドを追加し、次のように見えるようにします:
30 3 * * * /bin/tar -czf /backup/wordpress/wordpress-`date
+\%m\%d\%y`.tar.gz /var/www/wordpress;/usr/bin/scp -i
/root/.ssh/id_rsa_backup /backup/wordpress/wordpress-`date
+\%m\%d\%y`.tar.gz
backup@backup.example.com:/home/backup/backups注意:これは通常の方法ではありません。すべての作業を行うスクリプトを設定し、そのスクリプトをスケジュールする方が良いでしょう。しかし、この記事の簡潔さのために、その形式を使用します。
増分バックアップ
しかし、別のサーバーに独自のバックアップソフトウェアがある場合はどうでしょうか?私たちはデータを同期したいだけで、他のサーバーにバックアップ作業を任せたいのです。さらに、ファイルのタイムスタンプを保持したいです。そこで、rsyncを使用します。ここでのユースケースは、/var/www/wordpressからリモートサーバーの/home/backup/snapshots/wordpressディレクトリにすべてをインクリメンタルにコピーしたいというものです。これを実行するための簡単なコマンドは次のとおりです:
ssh backup@backup.example.com "mkdir -p /home/backup/sync"
rsync -avz --delete -e "ssh -i /root/.ssh/id_rsa_backup"
/var/www/wordpress backup@backup.example.com:/home/backup/sync
最初の行はスナップショットディレクトリを作成し、2番目の行は変更されたファイルをコピーします。これは、変更された、新しく作成された、または削除されたファイルを意味します。これをcronでスケジュールすることもできます:
EDITOR=nano crontab -ecrontabの行は次のようになります:
30 3 * * * /usr/bin/rsync -avz --delete -e "ssh -i
/root/.ssh/id_rsa_backup" /var/www/wordpress
backup@backup.example.com:/home/backup/syncこれで私たちのリモートサーバーは常にデータの新しい同期コピーを持ち、そこでバックアップを行うことができます。
バックアップデータベース
私たちはデータベースをバックアップすることもできます。まず、データをダンプしたいと思います。WordPressのインストールガイドに従った場合、データベース wordpress があり、ユーザー wordpressuser とパスワード password でアクセスできます。初期のダンプは次のように行うことができます:
mkdir /backup/mysql
mysqldump < wordpress -u wordpressuser -ppassword | gzip >
/backup/mysql/initial.sql.gzこのコマンドは初期のsql.gzというgzip圧縮されたSQLファイルを作成しました。これを毎日実行するには、以前のようにcronでスケジュールできます。結果として得られるcronの行は次のようになります:
0 4 * * * /usr/bin/mysqldump < wordpress -u wordpressuser
-ppassword | /bin/gzip > /backup/mysql/mysql--`date +\%m\%d\%y`.sql.gz
今、それをscpやrsyncと組み合わせてリモートでコピーすることもできます。
0 4 * * * /usr/bin/mysqldump < wordpress -u wordpressuser
-ppassword | /bin/gzip > /backup/mysql/mysql-`date +\%m\%d\%y`.sql.gz;
/usr/bin/scp -i /root/.ssh/id_rsa_backup /backup/mysql/mysql-`date
+\%m\%d\%y`.sql.gz backup@backup.example.com:/home/backup/
この設定により、緊急時に備えてデータの基本的なバックアップが整いました。
