Sichern Sie die MySQL-Datenbank in Dropbox

Lesezeit: 8 Minuten

In der Vergangenheit habe ich viel Hilfe von der SO-Community erhalten, und als ich das herausgefunden hatte, dachte ich, das ist meine Gelegenheit, etwas zurückzugeben. Hoffentlich hilft es jemandem.

Das Problem, mit dem ich konfrontiert war, war, dass meine Kernsite auf WordPress aufgebaut war, mit einer anderen Datenbank für einen E-Commerce-Bereich der Site, ich wollte die gesamte Site (alle Dateien, beide Datenbanken usw.) täglich in Dropbox sichern Basis.

Nach längerer Suche konnte ich nichts finden, was genau das tat, was ich suchte.

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

Ich bin auf die gestoßen WordPress Backup to Dropbox-Plugin, was mich zu 90% dorthin gebracht hat. Das Plugin ermöglichte es mir, alle Dateien auf der Website zu sichern, und es führt ein Backup der WordPress-Datenbank in einer von Ihnen festgelegten Häufigkeit durch.

Das Problem ist, dass das Plugin nur erstellt ein Backup der WordPress-Datenbank, aber nicht meiner E-Commerce-Datenbank.

Ich fand auch eine MySQL-Backup auf Dropbox Tutorial (Gutschrift, wo es fällig ist), auf dem ein Teil des folgenden Codes basiert. Es ist ein großartiges Tutorial, aber ich wollte, dass es das Backup zu unterschiedlichen Zeiten sichert und löscht – das Tutorial wird gleichzeitig gesichert und gelöscht.

Benutzeravatar von ScottD
ScottD

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

Um eine Sicherungskopie der E-Commerce-Datenbank zu speichern, habe ich einen Ordner im Stammverzeichnis meiner Website erstellt (/temp – nennen Sie ihn, wie Sie wollen). Dann musste ich tatsächlich 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.
?>

Jetzt sollte dieses Skript bei jeder Ausführung ein Backup der Datenbank “ecom_db_name” erstellen. Damit es in einem geplanten Intervall ausgeführt wird (ich möchte, dass es nur ein paar Minuten läuft, bevor mein WordPress-Backup um 7 Uhr morgens ausgeführt wird). Sie können entweder verwenden WP-Cron (wenn Ihre Website genügend Verkehr erhält, um sie zuverlässig zum richtigen Zeitpunkt auszuführen) oder einen Cron-Job planen.

Ich bin kein Experte für Cron-Jobs und diese Art von Befehlen, daher gibt es möglicherweise einen besseren Weg. Ich habe dies auf zwei verschiedenen Websites verwendet und sie auf zwei verschiedene Arten ausgeführt. Spielen Sie herum, was für Sie am besten funktioniert.

Der erste Weg ist für ein Verzeichnis, das nicht passwortgeschützt ist, der zweite für ein passwortgeschütztes Verzeichnis. (Ersetzen Sie Benutzername und Passwort durch Ihren Benutzernamen und Ihr Passwort und legen Sie example.com/temp/backup_dropbox.php natürlich dort fest, wo sich die Datei auf Ihrem Server befindet).

Cron-Job zum Ausführen von backup_dropbox.php 5 Minuten vor dem 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 so eingerichtet, dass er backup_dropbox.php ausführt und jeden Tag um 6:55 Uhr meine Datenbanksicherung erstellt. Das WordPress-zu-Dropbox-Backup, das um 7 Uhr morgens beginnt, dauert normalerweise etwa 5-6 Minuten, kann aber etwas länger dauern.

Ich möchte meine .sql-Sicherungsdateien löschen, nachdem sie erfolgreich in Dropbox gesichert wurden, damit sie nicht für immer da draußen sitzen, damit jemand die Datenbankdatei irgendwie ö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 das WordPress-Backup einige Minuten dauert, bis es fertig ist, möchte ich einen Cron-Job ausführen, um clr_bkup.php um 10 nach 7 auszuführen, was genügend Zeit geben sollte. Auch hier ist der erste Cron-Job unten für ein ungeschütztes Verzeichnis und der zweite für ein passwortgeschütztes Verzeichnis.

Cron-Job zum Ausführen von clr_bkup.php 10 Minuten nach dem Start der WP-Sicherung

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

Abfolge der Ereignisse

Um Ihnen zu helfen, sich einen Überblick über das Geschehen zu verschaffen, hier ist die Zeitachse:

6:55 Uhr: Cron Job soll backup_dropbox.php ausführen, wodurch eine Sicherungsdatei meiner Datenbank erstellt wird.

7:00 Uhr: WordPress Backup to Dropbox wird ausgeführt und sichert alle Dateien, die sich seit dem letzten Backup geändert haben, einschließlich meines 5 Minuten alten, neu erstellten Datenbank-Backups.

7:10 Uhr: Inzwischen ist das Dropbox-Backup abgeschlossen, sodass der Cron-Job clr_bkup.php ausführen soll, wodurch die Backup-Datei vom Server entfernt wird.

Variablen, Notizen und Sonstiges. Die Info

Zeitliche Koordinierung

Das erste, was mich aufgehängt hat, war das richtige Timing. Der Einfachheit halber habe ich die Zeiten im obigen Beispiel so verwendet, als würde alles in derselben Zeitzone stattfinden. In Wirklichkeit befindet sich der Server meines Webhosts an der US-Westküste, während meine WordPress-Zeitzone auf die US-Ostküste eingestellt ist (ein Unterschied von 3 Stunden). Meine eigentlichen Cron-Jobs werden so eingestellt, dass sie 3 Stunden früher (Serverzeit) als oben angezeigt ausgeführt werden. Das wird bei jedem anders sein. Am besten ist es, den Zeitunterschied im Voraus zu kennen.

Führen Sie eine Sicherung mit Zeitprüfung durch

In dem nicht passwortgeschützten Verzeichnis wollte ich verhindern, dass das Skript backup_dropbox.php zu einer anderen Tageszeit als 6:55 Uhr ausgeführt wird (indem es beispielsweise um 10 Uhr in einem Browser aufgerufen wird). Ich habe am Anfang der Datei backup_dropbox.php eine Zeitprüfung eingefügt, die im Grunde überprüft, ob es nicht 6:55 Uhr ist, und dann den Rest des Codes nicht ausführen lässt. Ich habe backup_dropbox.php geändert 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 könnten dies auch zur Datei clr_bkup.php hinzufügen, damit sie die Sicherungsdateien nur um 7:10 Uhr löscht, aber ich habe nicht wirklich die Notwendigkeit gesehen, da die einzige Zeit, in der clr_bkup.php etwas tut, zwischen 6:55 Uhr ist -7:10 Uhr sowieso. Es liegt jedoch an Ihnen, ob Sie sich für diesen Weg entscheiden.

Nicht auf WordPress?

Es gibt eine Reihe kostenloser und kostenpflichtiger Dienste, die Ihre Website entweder auf Dropbox oder einem anderen ähnlichen Dienst sichern Google Drive, Amazon S3, Kastenusw., oder einige speichern die Dateien gegen eine Gebühr auf ihren Servern.

Backup-Maschine, Codewächter, Dropmysite, Backup-Boxoder Mover um ein paar zu nennen.

Möchten Sie redundante Offsite-Backups?

Es gibt viele Dienste, mit denen Sie automatisch redundante Remote-Backups auf einer der oben aufgeführten Cloud-Speicherseiten erstellen können.

Wenn Sie beispielsweise Ihre Website in Dropbox sichern, können Sie einen Dienst namens verwenden Wenn dies dann das (IFTTT) um automatisch hochgeladene Dateien zu einem bestimmten hinzuzufügen Dropbox-Ordner auf Google Drive. Auf diese Weise haben Sie auch ein Google Drive-Backup, falls Dropbox jemals ein Problem mit seinen Servern haben sollte. Die oben aufgeführte Backup Box könnte auch so etwas tun.

Hoffe das hilft

Es gibt vielleicht einen besseren Weg, all dies zu tun. Ich war in der Klemme und musste etwas herausfinden, das zuverlässig funktioniert, was das tut. Wenn es Verbesserungen gibt, die vorgenommen werden können, teilen Sie dies bitte in den Kommentaren mit.

  • Es wäre sehr sinnvoll, die Dateien zu komprimieren. Hier ist wie: $sqlFile = $tempDir.$dbPrefix.".sql.gz"; $createBackup = "mysqldump -h ".$dbHost." -u ".$user." --password='".$password."' ".$dbName."| gzip > ".$sqlFile; (Hinweis: Ich glaube nicht, dass dies unter Windows funktionieren würde.)

    – Fabien Snauwaert

    21. Mai 2015 um 7:20 Uhr

Ich denke, dieser Beitrag erklärt eine Lösung, die Ihnen helfen kann:
http://ericsilva.org/2012/07/05/backup-mysql-database-to-dropbox/

  • Ich habe in der obigen Frage tatsächlich auf denselben Beitrag verlinkt. Ohne den Code aus diesem Beitrag wäre ich wohl nicht auf die Lösung gekommen, nach der ich gesucht habe. Vielen Dank!

    – ScottD

    3. Oktober 2013 um 12:47 Uhr

1390920cookie-checkSichern Sie die MySQL-Datenbank in Dropbox

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy