PHP-Skript erstellt eine leere SQL-Datei

8

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?

    
lol5433 19.10.2015, 19:20
quelle

7 Antworten

1

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:

  1. In Bezug auf David Walsh stammt der Code und das Tutorial, das Sie verfolgen, aus dem Jahr 2008, in dem MySQL verwendet wird, das jetzt veraltet ist. Der folgende Code verwendet vielleicht MySQLi.
  2. Wenn Sie den Code ausführen, erhalten Sie eine herunterladbare Sicherungsdatei. Sie können die Datei an ein sicheres Remote-Ziel wie Server, Cloud-Speicher (Dropbox usw.) übergeben.
  3. Um die Backup-Funktion regelmäßig auszuführen und abhängig von Ihrem Betriebssystem, der Umgebung, der Strategie und wie Sie diesen Ansatz verwenden möchten. In den meisten Fällen CRON ist die Lösung, um es jeden Abend einmal oder so etwas zu planen, gibt es einen Schlag für Tutorial und hilfreiche Informationen zu diesem Thema online.
  4. Eine Funktion dieser Funktion ist nur die Sicherung auf localhost, da die meisten Host-Provider für den Remote-Zugriff auf mysql gesperrt sind (daher kann diese Funktion keine Sicherung von MySQL-Remote-Tabellen durchführen).
  5. Am Anfang und zum Testen ist es in Ordnung, root username zu verwenden, aber wenn das funktioniert, schlage ich vor, dass Sie einen Benutzernamen und passwortspezifischen Zugriff auf die Tabelle erstellen, von der Sie eine Sicherungskopie erstellen möchten.

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%     
maytham-ɯɐɥʇʎɐɯ 31.10.2015, 13:38
quelle
5

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:

%Vor%

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:

%Vor%     
Get Off My Lawn 28.10.2015 19:32
quelle
4

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

%Vor%

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. :)

    
timgavin 24.10.2015 20:57
quelle
2

Ich sehe $ return nirgends vor der. = 'DROP-Zeile definiert. Ich hatte Fehler mit undefinierten Variablen wie dieser. Oberhalb der foreach () addiere $ return = '';

    
R. Vasquezq 19.10.2015 19:25
quelle
2

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

    
davejal 26.10.2015 22:44
quelle
1

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);

hinzuzufügen     
fatihn 26.10.2015 20:15
quelle
1
%Vor%     
Mitul 30.10.2015 09:13
quelle

Tags und Links