2012-08-17 106 views
9

Quiero crear una copia de seguridad desde una base de datos, pero obtengo solo un archivo en blanco.php exec() - mysqldump crea un archivo vacío

include('config.php'); 

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

echo "<br />".$command; 

test.sql se crea donde se encuentra el archivo .php.

Editar:

Nota! ¡Estoy usando XAMPP WINDOWS!

Solución:

porque estoy usando un servidor Web de Windows (XAMPP), que tenía que especificar la ruta:

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql'; 
  1. me quita el espacio entre el -py El permiso. Parece que: -pMYPASSWORD
  2. Sustituido " con '

Creo que si está utilizando un servidor web basado en Linux, que no tiene que especificar la ruta de mysqldump.

¡Salud! :-)

+4

Creo que debería eliminar el espacio entre la -p y la contraseña. –

+0

Todavía obtiene un archivo en blanco. –

+2

¿Ha intentado hacer eco del comando (para asegurarse de que todas las variables se pasen como se esperaba) o probarlo manualmente con la entrada correcta? – Fluffeh

Respuesta

0

Debe eliminar el espacio entre la -p y la contraseña.

--opt no es necesario con las versiones recientes de mysql.

Aparte de eso, su sintaxis es correcta, de modo que si no funciona con la corrección -p, debe verificar los parámetros y el comando producido.

4

Estos son los parámetros

-uroot -Pcontraseña --databases DB --result-file = file.sql

+0

para -u, puede tener un espacio. –

+0

test.sql aún 0 kb. –

0

Si nos fijamos en el manual de exec la salida pasa a una matriz que es la segundo argumento Esa puede ser la fuente del problema.

0

Tome las variables de las comillas y elimine --opt.

También asegúrese de que usted está teniendo nombres de archivo únicos

$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

Prueba con esto:

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

-su sobre el permiso problema.

+2

Las 2> y 1 al final me ayudaron al menos a obtener un error en lugar de un archivo vacío. –

0

Para aquellos en los Macs

Estaba luchando este tema toda la noche en la actualidad. Error tonto: uno necesita modificar el directorio donde está volcando el archivo.

me corrieron esto lo que ha solucionado el problema:

chmod -R 777 your_dump_directory/ 
0

Prueba esto:

$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); 
  • Cambiar la ruta a la dirección de la aplicación mysqldump.exe de su ordenador.
  • Respete el "" dentro del comando.

A continuación, forzar la descarga del archivo:

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

Editar: Usted tiene que dar permisos a la carpeta donde guarda copias.