2012-08-17 10 views
9

Chcę utworzyć kopię zapasową z bazy danych, ale otrzymam tylko pusty plik.php exec() - mysqldump tworzy pusty plik

include('config.php'); 

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

echo "<br />".$command; 

test.sql jest tworzony w miejscu, w którym znajduje się plik .php.

Edit:

Uwaga! Używam WINDOWS XAMPP!

Rozwiązanie:

Ponieważ używam serwera internetowego Windows (XAMPP), musiałem podać ścieżkę:

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql'; 
  1. usunąłem przestrzeń pomiędzy -P i przejście. Wygląda to tak: -pMYPASSWORD
  2. Zastąpiony " z '

Myślę, że jeśli używasz Linuksa opartą na serwer WWW, nie trzeba podać ścieżkę do mysqldump.

Pozdrawiam! :-)

+4

Myślę, że powinieneś usunąć spację między -p a hasłem. –

+0

Nadal dostaję pusty plik. –

+2

Czy próbowałeś wywołać echo polecenia (aby upewnić się, że wszystkie zmienne zostały przekazane zgodnie z oczekiwaniami) lub przetestować je ręcznie za pomocą prawego wejścia? – Fluffeh

Odpowiedz

0

Powinieneś usunąć spację między -p a hasłem.

--opt nie jest potrzebna w najnowszych wersjach mysql.

Poza tym twoja składnia jest poprawna, więc jeśli nie działa z poprawką -p, powinieneś sprawdzić parametry i wyprodukowane polecenie.

4

Są to parametry

-uROOT -Phasło --databases DB --result-file = FILE.SQL

+0

dla -u, możesz mieć spację. –

+0

test.sql nadal 0 kb. –

0

Jeśli spojrzeć na instrukcji dla exec wyjście idzie do tablicy, która jest drugi argument. To może być źródłem problemu.

0

Usuń zmienne z cudzysłowu i usuń --opt.

także upewnić się, że mają unikalne nazwy plików

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

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

system($command);

3

Spróbuj tego:

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

powierniczego o pozwolenie kwestia.

+2

2> i 1 na końcu pomogły mi przynajmniej uzyskać błąd zamiast pustego pliku. –

0

Dla tych na komputerach Mac

ja walczyłem tej kwestii dzisiaj cały wieczór. Głupi błąd: należy skopiować katalog, do którego zrzutujesz plik.

Pobiegłem ten który naprawił problem:

chmod -R 777 your_dump_directory/ 
0

Spróbuj tego:

$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); 
  • zmienić trasę do kierunku stosowania mysqldump.exe komputera.
  • Poszanuj "" wewnątrz polecenia.

Następnie wymusić pobieranie pliku:

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

Edycja: trzeba dać uprawnienia do folderu, w którym przechowywać kopie.