Frage php exec () - mysqldump erstellt eine leere Datei


Ich möchte ein Backup von einer Datenbank erstellen, aber ich bekomme nur eine leere Datei.

include('config.php');

$command = "mysqldump --opt -h ".$_host." -u ".$_user." -p ".$_pass." ".$_db." > test.sql";
exec($command);

echo "<br />".$command;

test.sql wird dort erstellt, wo sich die .php-Datei befindet.

Bearbeiten:

Hinweis! Ich benutze XAMPP WINDOWS!

Lösung:

Da ich einen Windows Web Server (XAMPP) verwende, musste ich den Pfad angeben:

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql';
  1. Ich habe den Abstand zwischen dem -p und dem Pass entfernt. Es sieht aus wie: -pMYPASSWORD
  2. Ersetzt " mit '

Ich denke, wenn Sie einen Linux-basierten Webserver verwenden, müssen Sie den Pfad für mysqldump nicht angeben.

Prost! :-)


9
2017-08-17 10:44


Ursprung


Antworten:


Dies sind die Parameter

-uROOT -pPASSWORD - Datenbanken DB --result-file = FILE.SQL


4
2017-08-17 10:51



Probier diese:

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql 2>&1';

-es über Berechtigungsproblem.


3
2017-10-04 19:42



Wenn Sie sich das Handbuch ansehen exec Die Ausgabe wird an ein Array übergeben, das das zweite Argument ist. Das könnte die Ursache des Problems sein.


0
2017-08-17 10:58



Sie sollten den Abstand zwischen dem -p und dem Passwort entfernen.

--opt ist nicht erforderlich mit den neuesten Versionen von MySQL.

Ansonsten ist Ihre Syntax korrekt. Wenn sie nicht mit der Korrektur -p funktioniert, sollten Sie die Parameter und den erzeugten Befehl überprüfen.


0
2017-08-17 10:47



Nimm die Variablen aus den Anführungszeichen und entferne --opt.

Stellen Sie außerdem sicher, dass Sie eindeutige Dateinamen haben

$backupfile = $dbname . date("Y-m-d-H-i-s") . '.sql';

$command = "D:\xampp\mysql\bin\mysqldump -u $_user -p$_pass $_db > $backupfile";

system($command);


0
2018-06-12 17:26



Für diejenigen auf Macs

Ich habe heute den ganzen Abend mit diesem Thema gekämpft. Dummer Fehler: man muss chmod das Verzeichnis, in dem Sie die Datei ablegen.

Ich habe das ausgeführt, was das Problem behoben hat:

chmod -R 777 your_dump_directory/

0
2018-01-25 07:38



Versuche dies:

$DBUSER="user";
$DBPASSWD="password";
$DATABASE="DBname";

$filename = "backup-" . date("d-m-Y") . ".sql";

$command = '"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe" '.$DATABASE ." -u".$DBUSER ." -p".$DBPASSWD." > your_web_site/$filename";
passthru($command);
  • Ändern Sie die Route in die Richtung der mysqldump.exe-Anwendung Ihres Computers.
  • Respektieren Sie das "" innerhalb des Befehls.

Dann erzwinge den Download der Datei:

if (file_exists("your_web_site/".$filename)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
readfile("your_web_site/".$filename);
exit;
}

Bearbeiten: Sie müssen dem Ordner, in dem Sie Kopien speichern, Berechtigungen erteilen.


0
2018-05-26 09:35