9

過去に SO コミュニティから多くの支援を受けてきたので、これを理解したら、ここで少し恩返しをする機会だと思いました。うまくいけば、それは誰かを助けます。

私が直面した問題は、コア サイトを WordPress で構築し、サイトの e コマース セクション用に別のデータベースを作成することでした。サイト全体 (すべてのファイル、両方のデータベースなど) を毎日 Dropbox にバックアップしたいと考えていました。基本。

長い間検索した結果、探していたものとまったく同じものを見つけることができませんでした。

免責事項: これが機能するために、WordPress や e コマース サイトを実行している必要はありません。任意の MySQL データベースで動作し、PHP が必要です。

WordPress Backup to Dropbox プラグインに出会い、約 90% を取得しました。プラグインを使用すると、サイト上のすべてのファイルをバックアップでき、さらにスケジュールした頻度で WordPress データベースのバックアップを実行できます。

問題は、プラグインが WordPress データベースのバックアップのみを行い、e コマース データベースのバックアップを行わないことです。

また、 MySQL の Dropbox へのバックアップのチュートリアルも見つけました(当然のことですが)。以下のコードの一部はこれに基づいています。これは素晴らしいチュートリアルですが、バックアップとバックアップの削除を別々の時間に行いたいと思いました - チュートリアルはすべて同時にバックアップと削除を行いました。

4

2 に答える 2

10

私が思いついた解決策は、WordPress や e コマース サイトに固有のものではありません。MySQL データベースを持っていて、PHP を実行できる人なら誰でも、この恩恵を受けることができるはずです。おそらく私の答えにいくつかの調整が加えられていますが、それでも最終結果を達成できるはずです。

e コマース データベースのバックアップを保存するために、サイトのルート ディレクトリ (/temp - 好きな名前を付けてください) にフォルダーを作成しました。次に、実際にデータベースのバックアップを作成する必要がありました。テキスト エディターを開き、backup_dropbox.php というファイルを作成します。

backup_dropbox.php

<?php
// location of your /temp directory relative to this file. In my case this file is in the same directory.
$tempDir = "";
// username for e-commerce MySQL DB
$user = "ecom_user";
// password for e-commerce MySQL DB
$password = "ecomDBpa$$word";
// e-commerce DB name to backup
$dbName = "ecom_db_name";
// e-commerce DB hostname
$dbHost = "localhost";
// e-commerce backup file prefix
$dbPrefix = "db_ecom";

// create backup sql file
$sqlFile = $tempDir.$dbPrefix.".sql";
$createBackup = "mysqldump -h ".$dbHost." -u ".$user." --password='".$password."' ".$dbName." > ".$sqlFile;
exec($createBackup);

//to backup multiple databases, copy all of the above code for each DB, rename the variables to something unique, and set their values to whatever is appropriate for the different databases.
?>

これで、このスクリプトは、実行されるたびにデータベース「ecom_db_name」のバックアップを作成するはずです。スケジュールされた間隔で実行するには (WordPress バックアップが午前 7 時に開始される数分前に実行する必要があります)。WP-Cronを使用するか(サイトが適切なタイミングで実行するように確実にトリガーするのに十分なトラフィックを取得する場合)、cron ジョブをスケジュールすることができます。

私は cron ジョブやこれらの種類のコマンドの専門家ではないので、もっと良い方法があるかもしれません。これを 2 つの異なるサイトで使用し、2 つの異なる方法で実行しました。あなたに最適なもので遊んでください。

最初の方法はパスワードで保護されていないディレクトリに対するもので、2 番目の方法はパスワードで保護されたディレクトリに対するものです。(username と Password を自分のユーザー名とパスワードに置き換え、明らかに example.com/temp/backup_dropbox.php をサーバー上のファイルが存在する場所に設定します)。

WP バックアップの 5 分前に backup_dropbox.php を実行する Cron ジョブ

55 6 * * * php /home/webhostusername/public_html/temp/backup_dropbox.php

また

55 6 * * * wget -q -O /dev/null http://username:Password@example.com/temp/backup_dropbox.php

これで、毎日午前 6 時 55 分に backup_dropbox.php を実行してデータベースのバックアップを作成するように cron ジョブが設定されました。午前 7 時に開始される WordPress から Dropbox へのバックアップは、通常 5 ~ 6 分かかりますが、もう少し時間がかかる場合があります。

Dropbox に正常にバックアップされた後、.sql バックアップ ファイルを削除したいので、誰かが何らかの方法でデータベース ファイルを開いたりダウンロードしたりするために永遠にそこに座っていません。

テキスト エディタを再度起動し、clr_bkup.php という別のファイルを作成します。

clr_bkup.php

<?
$tmpDir = "";
//delete the database backup file

unlink($tmpDir.'db_ecom.sql');
// if you had multiple DB backup files to remove just copy the line above for each backup, and replace 'db_ecom.sql' with your DB backup file name

?>

WordPress のバックアップが完了するまでに数分かかるため、cron ジョブを実行して 7 時 10 分に clr_bkup.php を実行したいと考えています。繰り返しますが、以下の最初の cron ジョブは保護されていないディレクトリ用で、2 番目はパスワードで保護されたディレクトリ用です。

WP バックアップ開始から 10 分後に clr_bkup.php を実行する Cron ジョブ

10 7 * * * php /home/webhostusername/public_html/temp/clr_bkup.php

また

10 7 * * * wget -q -O /dev/null http://username:Password@example.com/temp/clr_bkup.php

イベントの順序

何が起こっているのかを理解するのに役立つように、タイムラインを次に示します。

6:55am: Cron ジョブは、データベースのバックアップ ファイルを作成する backup_dropbox.php を実行するようにスケジュールされています。

午前 7:00: WordPress Backup to Dropbox が実行され、前回のバックアップ以降に変更されたすべてのファイルがバックアップされます。これには、5 分間前に新しく作成されたデータベース バックアップが含まれます。

7:10am: Dropbox のバックアップが完了したので、Cron ジョブが clr_bkup.php を実行するようにスケジュールされています。これにより、サーバーからバックアップ ファイルが削除されます。

変数、メモ、およびその他。情報

タイミング

最初に電話を切ったのは、タイミングを正しくすることでした。簡単にするために、上記の例では、すべてが同じタイム ゾーンで起こっているかのように時間を使用しました。実際には、私の Web ホストのサーバーは米国西海岸にあり、WordPress のタイムゾーンは米国東海岸に設定されています (3 時間の差)。私の実際の cron ジョブは、上記の表示よりも 3 時間早く (サーバー時間) 実行されるように設定されています。これは誰にとっても異なります。最善の策は、前もって時差を知ることです。

タイム チェックを使用してバックアップを実行する

パスワードで保護されていないディレクトリでは、backup_dropbox.php スクリプトが午前 6 時 55 分以外に実行されないようにしたいと考えました (たとえば、ブラウザで午前 10 時にアクセスするなど)。backup_dropbox.php ファイルの先頭にタイム チェックを含めました。これは基本的に、午前 6 時 55 分ではないかどうかをチェックし、残りのコードを実行させないようにします。backup_dropbox.php を次のように変更しました。

<?php
$now = time();
$hm = date('h:i', $now);
if ($hm != '06:55') {
    echo "error message";
} else {
// DB BACKUP code from above goes here
}
?>

これをclr_bkup.phpファイルに追加して、午前7時10分にのみバックアップファイルを削除できるようにすることもできると思いますが、clr_bkup.phpが何かを行うのは6時55分の間だけであるため、実際にはその必要性はわかりませんでした-とにかく午前7時10分。あなたがその道を行くことに決めた場合でも、あなた次第です。

WordPress にありませんか?

Web サイトを Dropbox やGoogle DriveAmazon S3Boxなどの同様のサービスにバックアップする無料および有料のサービスが多数あります。また、有料でサーバーにファイルを保存するサービスもあります。

いくつか例を挙げると、 Backup MachineCodeguardDropmysiteBackup Box、またはMoverです。

冗長なオフサイト バックアップが必要ですか?

上記のクラウド ストレージ サイトのいずれかに、リモート冗長バックアップを自動的に作成できるサービスがたくさんあります。

たとえば、サイトを Dropbox にバックアップする場合、If This Then That (IFTTT)というサービスを使用して、特定の Dropbox フォルダーにアップロードされたファイルを自動的に Google ドライブに追加できます。そうすれば、Dropbox のサーバーに問題が発生した場合でも、Google ドライブのバックアップが作成されます。上記のバックアップ ボックスでも、このようなことができます。

お役に立てれば

このすべてを行うためのより良い方法があるかもしれません。私はピンチに陥っており、確実に機能するものを見つけ出す必要がありました。改善できる点があれば、コメントで共有してください。

于 2013-10-02T15:44:22.280 に答える