Web サイトを毎晩自動的にバックアップする


今週初め、Cornerhost と呼ばれるサービスでサイトをホストしている Web サイトの所有者は大きな恐怖を感じました。サービスは予告なく終了するようで、彼らの飼い主はどこにも見つかりませんでした。恐ろしいですよね?ただし、Web サイトを定期的にバックアップしない限りは問題ありません。ここでは、Web サイトの自動バックアップを設定して、最悪の事態が発生した場合でもデータを安全に保管できるようにする方法を説明します。

WordPress ブログから銘板サイトファイル共有サービスソーシャルメディアデータアーカイブ- コンピュータのデータをバックアップするのと同じ方法で、Web サーバーのデータをバックアップする必要があります。データベース主導の Web サイトでは、災害に備えて保存および復元する必要がある 2 種類のデータがあります。サイトを構成するファイル (PHP/Perl/Python、JavaScript、CSS ファイルなど) とコンテンツです。データベースの。さらに、優れたバックアップ システムでは、バックアップ データのローカル コピーとリモート コピーの両方を作成する必要があります。

私はこのブログを含め、データベース主導のサイトやアプリケーションをいくつか運営しているので、バックアップ システムが堅牢である必要があります。セットアップ方法は次のとおりです。

このメソッドは次のことを前提としています。

  • あなたはLAMPベースのWebサイト(Linux、Apache、MySQL、および PHP/Perl/Python)。

  • SSH 経由で Web サーバーにコマンドラインでアクセスできます。

  • 新しいフォルダーを作成する方法とファイルに対する chmod 権限を理解しています。

  • サーバー上のコマンド ラインで bash スクリプトを実行したり、cron ジョブを設定したりすることに慣れています。

  • すべての Web サーバーのファイルがどこに保存されているか、どのデータベースをバックアップする必要があるか、MySQL へのログインに使用するユーザー名とパスワードはわかっています。

  • リモート データ バックアップを行うには、サイトのサーバーに加えて、SSH 経由で利用可能な別のサーバーにアクセスする必要があります。私は友人に、バックアップ ファイルを保存するために彼のサーバーにアカウントを作成するように頼みました。そして、彼は快く引き受けてくれました。別のホストのサーバーを使用している友人がいない場合は、自宅で常時稼働のサーバーを実行し、そこにバックアップすることができます。私は、帯域幅の速度が遅い可能性があるので、自宅ではコンピューターを常に起動したくないので、バックアップ先の友人を見つけることをお勧めします (友人にも同様の礼儀を提供できます)。

すべてのシステムが動作しますか?バックアップ システムをセットアップしましょう。

最初: ローカルバックアップ

Web サイトをバックアップするには、スクリプトでサイトを構成するすべてのファイルとデータベース内のすべてのデータの 2 つをバックアップする必要があります。このスキームでは、PHP または PERL スクリプトが生成する HTML ページをバックアップするのではありません。データベース内のデータにアクセスする PHP または PERL のソース コード自体をバックアップすることになります。こうすることで、サイトがダウンした場合でも、新しいホスト上でサイトを復元でき、すべてが現在と同じように機能するようになります。

まず、Web サーバーに SSH で接続し、ホーム ディレクトリに という名前のフォルダーを作成します。backups。このフォルダー内に、という名前のファイルを作成します。backup.sh。次に、フォルダー名を作成しますfiles

結果は次のようになります。

your_home_directory/|+ - backups/    |    + - backup.sh    |    + - files/

私たちが今気にかけているファイルはbackup.sh。このファイルは、データを圧縮して次の場所に保存するスクリプトになります。files

私が実行するスクリプトは、次のサイトで見つけた例に大きく基づいています。ハウツーオタクの wiki。のソースコードは次のとおりですbackup.shこれは、smarterware.org のファイルとデータベースを処理します。

#!/bin/shTHESITE="smarterware.org"THEDB="my_database_name"THEDBUSER="my_database_user"THEDBPW="my_database_password"THEDATE=`date +%d%m%y%H%M`mysqldump -u $THEDBUSER -p${THEDBPW} $THEDB | gzip > /var/www/vhosts/$THESITE/backups/files/dbbackup_${THEDB}_${THEDATE}.bak.gztar czf /var/www/vhosts/$THESITE/backups/files/sitebackup_${THESITE}_${THEDATE}.tar -C / var/www/vhosts/$THESITE/httpdocsgzip /var/www/vhosts/$THESITE/backups/files/sitebackup_${THESITE}_${THEDATE}.tarfind /var/www/vhosts/$THESITE/backups/files/site* -mtime +5 -exec rm {} \;find /var/www/vhosts/$THESITE/backups/files/db* -mtime +5 -exec rm {} \;

このソースコードをコピーして、backup.shファイル。このスクリプトを私と同様の設定で正常に実行するには、行 3 ~ 7 で、smarterware.org、my_database_name、my_database_user、および my_database_password を Web サイトの適切な値に置き換える必要があります。

このバージョンのスクリプトでは、ファイルの場所について 2 つの想定をしています。私の Web サーバー (すべてのセットアップではありませんが、多くのセットアップ) では、ホーム ディレクトリは次のようなパスになります。/var/www/vhosts/example.com/(example.com は Web サイトのドメインです)。 Web でアクセスできる公開ファイルはすべて次の場所にあります。/var/www/vhosts/example.com/httpdocs/(example.com は Web サイトのドメインです)。

Web サイトのファイル パスは異なる場合があります。存在する場合は、スクリプトのソース コードで次のように置き換えます。/var/www/vhosts/$THESITE/backups/バックアップフォルダーの場所へのパスを置き換えます。/var/www/vhosts/$THESITE/httpdocs/サイトの Web アクセス可能なファイルの場所。

このスクリプトが何をしているのかを見ていきましょう。 3 行目から 7 行目でいくつかの変数を設定した後、9 行目でmysqldump行 4 で指定されたデータベース内のすべてのデータをアーカイブし、files次のようなファイル名を使用したディレクトリdbbackup_example.com_1402120101.bak.gz.tar。行 11 と 12 は、サイトのソース コード ファイルをhttpdocsディレクトリに保存し、filesディレクトリに、次のようなファイル名を使用しますsitebackup_example.com_1402120101.tar。これらのファイル名には両方とも日付が含まれているため、バックアップがいつ作成されたかを確認できます。

最後に、14 行目と 15 行目では、5 日以上前に作成されたバックアップを削除しています。このバックアップ スクリプトを毎晩実行すると、ファイルはすぐに多くのスペースを占有します。このため、これらの最後のコマンドは古いバックアップを削除します。数字 5 は、バックアップを保持したい任意の日数に変更できます。

このスクリプトを実行するには、次のことを行う必要があります。chmod +x backup.sh。手動で実行して、期待どおりのバックアップ ファイルが生成されることを確認します。最後に、crontab で好きなだけ実行するようにスケジュールを設定します。毎朝午前 1 時 1 分に実行すると、crontab は次のようになります。

1       1       *       *       *      /var/www/vhosts/example.com/backups/backup.sh

関心のあるすべての Web サイトとデータベースに対してこのスクリプトを実行していることを確認してください。

このバックアップ スクリプトが数晩ベッドでぐっすり眠っている間に実行されると、filesディレクトリは、少なくとも 5 日分のファイルとデータベースの内容のバックアップでいっぱいになります。素晴らしい仕事だ。

しかし、まだ終わっていません。

次へ: リモートバックアップ

Web サーバーにバックアップを作成しておくと、WordPress の更新が失敗したり、データベースからブログ投稿を誤って削除したりした場合に、ベーコンを保存できます。ただし、Web サーバーが次のような場合は役に立ちません。到達不可能なあるいは火事で死ぬ。このため、このデータのコピーをリモート サーバーに自動的に送信する必要があります。

寛大な友人や自宅のおかげでリモート サーバーにアクセスできるようになったら、次はrsync全体的な災害が発生した場合に、Web サーバーのすべてのバックアップを Web サーバーに転送するジョブ。駆け下りたrsync を使用してシステム間でファイルをミラーリングする方法何年も前のことなので蒸し返すつもりはありませんが、ここでも同じアプローチを使用することになります。

つまり、リモート サーバー上に、という名前のフォルダーを作成します。offsitebackups。新しい Web サイトのバックアップ ファイルをリモート ホストに再同期するには、そのホストに SSH で接続し、次のようなジョブを cron します。

rsync -e ssh -a —delete [email protected]:/var/www/vhosts/example.com/backups/files/ /your/path/to/offsitebackups/

ユーザー名、Web サイト名、パスを自分の情報に置き換えます。

このコマンドは、ホストのすべてのファイルを同期します。backupsフォルダをリモートサーバーのoffsitebackupsフォルダ。実行して動作することを確認します。 Web サーバーにログインするときに、パスワードの入力を求めるプロンプトが表示されます。同期が完了すると、バックアップ ファイルがoffsitebackupsフォルダ。

問題は、毎晩 cron が実行されるときにパスワードを入力する必要がないことです。介入なしで実行するには、次のことを行う必要があります。パスワードなしのログインを設定するWeb サーバーに接続します。これrsync を使用したバックアップの自動化に関する優れたチュートリアルそれらのステップも実行します。

Web サーバーのローカルおよびリモート、データベースおよびファイルのバックアップを設定するには、事前に時間と労力が必要ですが、一度設定してしまえば、忘れて構いません。このシステムを使用すると、変更が失われたり、データが二度と復元できなくなることを心配することなく、ブログを書いたり、ブログ ソフトウェアを最新の状態にしたり、Web サーバー上のファイルを直接手動で編集したりできます。

Web サイトを毎晩自動的にバックアップする|スマートウェア


ここであなたの作品を見たいですか?にメールを送信してください[メールで保護されています]