2013-10-02 22 views
10

これまで、私はSOコミュニティから多くの助けを受けていましたので、これを理解したら、少し返済する機会がありました。うまくいけば、誰かを助けてくれるだろMySQLデータベースをDropboxにバックアップ

私が直面した問題は、WordPressでコアサイトを構築し、サイトの電子商取引セクション用の別のデータベースを使用していたため、サイト全体(すべてのファイル、両方のデータベースなど)をDropboxを毎日使います。

長い検索の後に、私が探していたものを見つけられませんでした。

免責事項:これが動作するには、WordPressまたは電子商取引サイトを実行する必要はありません。それはどんなMySQLデータベースでも動作し、PHPを必要とします。

私はWordPress Backup to Dropbox pluginに出くわしました。私には約90%の人がいました。プラグインを使用すると、サイトのすべてのファイルをバックアップすることができました。さらに、スケジュール設定した頻度でWordPressデータベースのバックアップを行います。

問題は、プラグインのみがWordPressデータベースのバックアップを行いますが、私の電子商取引データベースはバックアップしないということです。

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

+0

良いチュートリアル:) –

答えて

12

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

電子商取引データベースのバックアップを保存するために、私は自分のサイトのルートディレクトリに/ tempというフォルダを作成しました。その後、実際にデータベースのバックアップを作成する必要がありました。テキストエディタを開き、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. 
?> 

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

私はcronジョブとこれらのタイプのコマンドについては熟練していないので、より良い方法があるかもしれません。私はこれを2つの異なるサイトで使用し、2つの異なる方法で実行しています。あなたのために最適なもので遊んでください。

最初の方法はパスワードで保護されていないディレクトリで、2番目の方法は​​です。 (ユーザ名とパスワードをあなたのユーザ名とパスワードに置き換え、明らかにexample.com/temp/backup_dropbox.phpをあなたのサーバ上にあるファイルに置き換えてください)。

backup_dropboxを実行するジョブ。今、cronジョブがbackup_dropbox.phpを実行して、6:55に毎日私のデータベースのバックアップを作成するように設定されているWPのバックアップ前に、PHP 5分

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

OR

55 6 * * * wget -q -O /dev/null http://username:[email protected]/temp/backup_dropbox.php 

。午前7時から始まるDropboxへのWordPressのバックアップには通常5〜6分かかりますが、少し時間がかかります。

.SqlバックアップファイルをDropboxにバックアップした後に削除したいので、誰かが何らかの理由でデータベースファイルを開いたりダウンロードしたりすることなく永久にそこに座っていません。

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

WordPressのバックアップは、最後の仕上げには数分かかりますので、私は十分にそれを与えるべきである、10過去7でclr_bkup.phpを実行するcronジョブを実行したい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 

?> 

時間。再度、最初のcronジョブは保護されていないディレクトリ用であり、2番目の作業はパスワードで保護されたディレクトリです。 WPのバックアップは何の周りにあなたの頭をラップ支援するためのイベント

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

OR

10 7 * * * wget -q -O /dev/null http://username:[email protected]/temp/clr_bkup.php 

シーケンスを開始した後clr_bkup.php 10分を実行するための

cronジョブここでタイムラインがあります:

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

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

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

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

タイミング

右のタイミングを得ていた私を切った最初の事。簡単にするために、上の例では、同じタイムゾーンですべてが起こっているかのように時間を使いました。実際には、私のウェブホストのサーバーは米国西海岸にあり、私のワードプレスのタイムゾーンは米国東海岸(3時間の差)に設定されています。私の実際のcronジョブは、上記のものより3時間早く(サーバー時間)実行するように設定されています。これは誰にとっても異なるでしょう。最善の賭けは、前の時間差を知ることです。パスワードで保護されていないディレクトリ内の時間チェックイン

ランバックアップ、私が訪問して(6:55より一日の他の時間で実行されているからbackup_dropbox.phpスクリプトを維持したいですたとえば、ブラウザでは午前10時に)。 backup_dropbox.phpファイルの先頭に時間チェックを入れました。これは、基本的には6時55分でないかどうかをチェックし、残りのコードを実行させません。私はあなただけそれが7:10にバックアップファイルを削除してみましょうにclr_bkup.phpファイルにこれを追加することができると仮定し、私は本当に以来、必要性を見ていない

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

:私はにbackup_dropbox.phpを修正しましたclr_bkup.phpが何かを行う唯一の時間は、何とか6:55-7:10amです。あなたがそのルートに行くことを決めるならば、あなた次第です。

WordPressにはありませんか?

は意志バックアップあなたのウェブサイトのいずれかなどのDropboxやGoogle Driveのような他の同様のサービス、Amazon S3Boxに、または一部が有料で自分のサーバーにファイルを保存します無料と有料のサービスがいくつかあります。

Backup MachineCodeguardDropmysiteBackup Box、またはMoverは、いくつかの名前を付けます。

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

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

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

希望これは、このすべてを行うための良い方法があるかもしれません

に役立ちます。私はピンチで、確実に動作するものを見つけ出す必要がありました。改善があれば、コメントを共有してください。

+1

これは、ファイルを圧縮するために大きな意味を持ちます。方法は次のとおりです。 '$ sqlFile = $ tempDir。$ dbPrefix。"。sql.gz ";$ createBackup = "mysqldump -h"。$ dbHost。 "-u"。$ user。 "--password = '"。$ password。 "' $ dbName。" | gzip> "。$ sqlFile;' (注:これはWindowsではうまくいくとは思わない) –

1

私はこの記事は、溶液ウィッヒはあなたを助けることができると思います説明: http://ericsilva.org/2012/07/05/backup-mysql-database-to-dropbox/

+0

私は実際には、上記の質問の同じ記事にリンクしています。そのポストのコードがなければ、私が探していた解決策を思いついたとは思えません。ありがとう! – ScottD

関連する問題