Das ist neu für mich. Wenn ich dieses MySQL-Datenbank-PHP-Skript von David Walsh verwende, bekomme ich beim Ausführen eine leere SQL-Datei.
%Vor% Als ich den Code verstanden habe, habe ich den DB-Namen eingegeben, wo sich der Blog in der Funktion backup_tables()
an der Spitze befindet.
Warum erstellt das Skript eine leere SQL-Datei?
Ich habe Ihre Frage von Anfang an verfolgt, ich habe meine Recherchen durchgeführt und Ihre Frage auf irgendeine Weise interessant gefunden.
Die meisten Lösungen zum Sichern von MySQL über PHP-Code sind veraltet und haben Probleme mit der heutigen Umgebung. Daher war ich neugierig zu finden, ob es einmal aktualisiert und nützlich war. Mein Plan war, wenn ich keinen finden könnte, dann wollte ich einen entwickeln.
Aber ich habe eine Lösung gefunden und es funktioniert. Ich habe es getestet, indem ich Tabellen exportiert und wieder importiert habe. Und ich denke, du wirst es mögen.
Bevor ich zum Code gehe, habe ich folgende Anmerkungen:
Hinweis: Der Code wird in Bezug auf den Code auf dieser Seite gefunden Besitzer, habe ich zusätzliche Codezeile hinzugefügt, nur um es für das OP arbeiten zu lassen.
Sehr wichtiger Hinweis: Abhängig von Ihren Serverressourcen & amp; Kapazität und Ihre Datenbankgröße, die Ausführung eines solchen Codes könnte Zeit erfordern, speziell und in der Regel, wenn Sie ein Shared Hosting haben, müssen Sie daher Ihre Ausführungszeit bis zu 300 Sekunden (5 Minuten) verlängern und das Backup sollte in geringer Auslastung Stunden. Im schlimmsten Fall müssen Sie möglicherweise Ihren Host-Provider bitten, die Ausführungszeit zu verlängern, wenn dieser Teil durch Code verhindert wird.
Der Arbeitscode
%Vor% Es gibt einen viel besseren Weg, dies zu tun, nämlich mit mysqldump
. Es ist gebaut um Backups von Tabellen zu erstellen und es ist viel schneller als PHP. Sie müssen nur den folgenden Befehl in Ihrem Terminal ausführen:
Wenn Sie nur ein paar Tabellen sichern möchten, können Sie dies tun:
%Vor%Es gibt viele weitere Optionen, die Sie verwenden können, daher werde ich sie nicht aufführen, aber Sie können hierüber lesen:
Wenn Sie PHP dazu benötigen, können Sie es einfach über exec()
oder eine andere ähnliche Methode ausführen:
Ich habe dieses Skript ausprobiert, und es funktionierte für mich, wenn auch mit einigen Fehlern und einigen Abschreibungswarnungen.
Um die Datei zu speichern, vergewissern Sie sich, dass das Verzeichnis, in dem sich Ihr Skript befindet, Schreibrechte hat.
%Vor% Um die Meldung Undefined variable: return
zu verhindern, fügen Sie den folgenden Code hinzu
direkt vor dieser Zeile
%Vor%Und - ich weiß, das scheint offensichtlich - aber stellen Sie sicher, dass Sie eine Verbindung zur richtigen Datenbank herstellen oder dass Sie keinen Tippfehler für den Datenbanknamen haben.
%Vor%Und schließlich: Stellen Sie sicher, dass die Datenbank Tabellen enthält. Ich habe es ohne Tabellen in der Datenbank ausgeführt, um zu sehen, was passiert ist - und es spuckte ein leeres Dokument aus. Genau wie du es beschrieben hast. :)
Ich sehe $ return nirgends vor der. = 'DROP-Zeile definiert. Ich hatte Fehler mit undefinierten Variablen wie dieser. Oberhalb der foreach () addiere $ return = '';
Um zu timgavins Antwort hinzuzufügen, könntest du auch dieses Skript komprimieren, einfach
hinzufügen %Vor%nach oben
und ändern Sie den Boden von
%Vor%bis
%Vor%Eine andere Option wird erklärt von mohd_anas auf seinem Blog und auch auf github
Wenn Sie Ihr Skript mit einem Tabellennamen ausführen, funktioniert es ordnungsgemäß. Sie sollten $ return = ''; natürlich bis zur Linie 26.
backup_tables('localhost','root','arcd','unilicadb', 'fa_university');
Wenn Sie backup_tables('localhost','root','arcd','unilicadb', '*');
mit Platzhalter ausführen, können Sie einen Speicherfehler bekommen, falls Sie eine große Datenbank haben.
"Fataler Fehler: Erlaubte Speichergröße von 134217728 Byte erschöpft (versucht, 34399640 Bytes zuzuweisen)"
Versuchen Sie, error_reporting(E_ALL);