2013-10-02 20 views
10

In der Vergangenheit habe ich eine Menge Hilfe von der SO-Community erhalten, also dachte ich, hier ist meine Gelegenheit, etwas zurückzugeben. Hoffentlich hilft es jemandem.Backup MySQL Datenbank Dropbox

Das Problem, mit dem ich konfrontiert war, war mit meiner Kern-Site auf WordPress gebaut, mit einer anderen Datenbank für einen E-Commerce-Bereich der Website, wollte ich die gesamte Website (alle Dateien, beide Datenbanken, etc.) zu sichern Dropbox auf einer täglichen Basis.

Nach einer langen Suche konnte ich nichts finden, was genau das tat, wonach ich suchte.

Haftungsausschluss: Sie müssen WordPress oder eine E-Commerce-Website nicht ausführen, damit dies funktioniert. Es funktioniert auf allen MySQL-Datenbanken und erfordert PHP.

Ich stieß auf die WordPress Backup to Dropbox plugin, die mir etwa 90% dort bekam. Das Plugin erlaubte mir, alle Dateien auf der Website zu sichern, und es macht eine WordPress-Datenbank-Backup in einer Häufigkeit, die Sie planen.

Das Problem ist, dass das Plugin nur eine Sicherung der WordPress-Datenbank tut, aber nicht meine E-Commerce-Datenbank.

Ich fand auch eine MySQL backup to Dropbox Tutorial (Kredit, wo es fällig ist), auf dem einige der folgenden Code basiert. Es ist ein großartiges Tutorial, aber ich wollte, dass das Backup zu verschiedenen Zeiten gesichert und gelöscht wird - das Tutorial wird gleichzeitig gesichert und gelöscht.

+0

gutes Tutorial :) –

Antwort

12

Die Lösung, die ich mir ausgedacht habe, ist nicht spezifisch für WordPress oder eine E-Commerce-Website. Jeder, der über eine MySQL-Datenbank verfügt und PHP ausführen kann, sollte davon profitieren können. Vielleicht mit ein paar Verbesserungen an meiner Antwort, aber dennoch sollten sie in der Lage sein, das Endergebnis zu erreichen.

Um eine Sicherungskopie der E-Commerce-Datenbank zu speichern, habe ich einen Ordner im Stammverzeichnis meiner Site erstellt (/ temp - rufe ihn auf, was immer du willst). Dann musste ich eigentlich die Datenbanksicherung erstellen. Öffnen Sie einen Texteditor und erstellen Sie eine Datei namens 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. 
?> 

Nun sollte dieses Skript eine Sicherung der Datenbank "ecom_db_name" erstellen, wenn es ausgeführt wird. Um es in einem geplanten Intervall laufen zu lassen (Ich möchte, dass es nur ein paar Minuten läuft, bevor mein WordPress-Backup um 7 Uhr startet). Sie können entweder WP-Cron verwenden (wenn Ihre Site genügend Traffic erhält, um die Ausführung zur richtigen Zeit zuverlässig auszulösen) oder einen Cron-Job planen.

Ich bin kein Experte für Cron-Jobs und diese Arten von Befehlen, so kann es einen besseren Weg geben. Ich habe dies auf zwei verschiedenen Seiten verwendet und sie auf zwei verschiedene Arten ausgeführt. Spielen Sie mit dem, was am besten für Sie funktioniert.

Der erste Weg ist auf einem Verzeichnis, das nicht durch ein Passwort geschützt ist, die zweite ist für eine password protected directory. (Ersetzen Sie den Benutzernamen und das Passwort durch Ihren Benutzernamen und Ihr Passwort und setzen Sie natürlich example.com/temp/backup_dropbox.php dort, wo sich die Datei auf Ihrem Server befindet).

Cron-Job zum Ausführen von backup_dropbox.PHP 5 Minuten vor WP Backup

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

ODER

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

Jetzt ist der Cron-Job eingerichtet ist, laufen backup_dropbox.php und meine Datenbank-Backup, um 6:55 Uhr jeden Tag zu erstellen. Die WordPress-zu-Dropbox-Sicherung, die um 7 Uhr morgens beginnt, dauert in der Regel 5-6 Minuten, könnte aber etwas länger dauern.

Ich möchte meine .sql-Backup-Dateien löschen, nachdem sie erfolgreich in Dropbox gesichert wurden, so dass sie nicht für immer da draußen liegen bleiben, damit jemand die Datenbankdatei öffnen/herunterladen kann.

Starten Sie den Texteditor erneut und erstellen Sie eine weitere Datei namens 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 

?> 

Da die Wordpress-Backup dauert ein paar Minuten zu beenden, möchte ich einen Cron-Job ausführen clr_bkup.php bei 10 letzten 7 auszuführen, die es genug geben sollte Zeit. Wiederum ist der erste Cron-Job für ein ungeschütztes Verzeichnis und das zweite für ein passwortgeschütztes Verzeichnis.

Cron Job 10 Minuten laufen clr_bkup.php nach WP Backup

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

ODER

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

Ablauf der Ereignisse

Um Ihren Kopf zu wickeln beginnt um, was los, hier ist die Zeitleiste:

6:55 am: Cron Job soll backup_dropbox.php ausführen, das eine Backup-Datei meiner Datenbank erstellt.

7:00 Uhr: WordPress Backup to Dropbox läuft und sichert alle Dateien, die seit der letzten Sicherung geändert wurden, einschließlich meiner 5 Minuten alten, neu erstellten Datenbanksicherung.

7:10 am: Inzwischen ist die Dropbox-Sicherung beendet, so dass der Cron-Auftrag clr_bkup.php ausführen soll, wodurch die Sicherungsdatei vom Server entfernt wird.

Variablen, Notizen und Misc. Info

Zeit

Das erste, was mir aufgehängt wurde richtiges Timing zu bekommen. Der Einfachheit halber habe ich die Zeiten im obigen Beispiel so verwendet, als ob alles in derselben Zeitzone ablaufen würde. In Wirklichkeit ist der Server meines Webhosts an der Westküste der USA, während meine WordPress-Zeitzone auf die Ostküste der USA eingestellt ist (3 Stunden Unterschied). Meine tatsächlichen Cron-Jobs werden so eingestellt, dass sie 3 Stunden früher (Serverzeit) ausgeführt werden als oben angezeigt. Das wird für jeden anders sein. Die beste Wette ist, den Zeitunterschied von vorne zu kennen.

Run-Backup mit einer Zeit Check

In dem Verzeichnis, das nicht durch ein Passwort geschützt ist, ich das backup_dropbox.php Skript laufen zu jeder anderen Zeit des Tages als 6.55 halten will (durch den Besuch es in einem Browser um 10 Uhr zum Beispiel). Ich habe eine Zeitprüfung am Anfang der Datei backup_dropbox.php eingefügt, die im Grunde überprüft, ob es nicht 6:55 Uhr ist, dann lass es den Rest des Codes nicht ausführen. Ich veränderte backup_dropbox.php zu:

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

Ich nehme an, Sie auch diese in die clr_bkup.php Datei hinzufügen konnte nur lassen Sie es die Backup-Dateien, um 7:10 Uhr zu löschen, aber ich habe nicht wirklich das Bedürfnis da Die einzige Zeit, in der clr_bkup.php etwas tut, ist zwischen 6: 55-7: 10 Uhr. Bis zu Ihnen, wenn Sie sich entscheiden, diese Route zu gehen.

Nicht auf WordPress?

Es gibt eine Reihe von Dienstleistungen kostenloser und kostenpflichtiger das wird ein Backup Ihrer Website entweder zu Dropbox oder einen ähnlichen Dienst wie Google Drive, Amazon S3, Box usw. oder einige die Dateien auf ihren Servern für eine Gebühr gespeichert werden.

Backup Machine, Codeguard, Dropmysite, Backup Box oder Mover nur einige zu nennen.

Möchten Sie redundante Offsite-Sicherungen?

Es gibt zahlreiche Dienste, mit denen Sie automatisch redundante redundante Sicherungen auf einer der oben genannten Cloud-Speicher-Websites erstellen können.

Wenn Sie zum Beispiel Ihre Site in Dropbox sichern, können Sie einen Service namens If This Then That (IFTTT) verwenden, um automatisch Dateien hinzuzufügen, die auf einen bestimmten Dropbox folder to Google Drive hochgeladen wurden. Auf diese Weise sollte Dropbox jemals ein Problem mit ihren Servern haben, Sie haben auch eine Google Drive-Sicherung. Die oben aufgeführte Backup-Box könnte auch so etwas tun.

this helps

Es kann zu tun, all dies ein besserer Weg. Ich war in einer Prise und musste etwas herausfinden, das zuverlässig funktioniert, was das tut. Wenn Verbesserungen möglich sind, teilen Sie diese bitte in den Kommentaren mit.

+1

Es würde sehr viel Sinn machen, die Dateien zu komprimieren. So geht's: '$ sqlFile = $ tempDir. $ DbPrefix.". Sql.gz "; $ createBackup = "mysqldump -h". $ DbHost. "-u". $ Benutzer. "--password = '". $ Password. "'". $ DbName. "| Gzip>". $ SqlFile; ' (Hinweis: Ich glaube nicht, dass dies unter Windows funktionieren würde.) –