Foros del Web » Programando para Internet » PHP »

Exportar base de datos

Estas en el tema de Exportar base de datos en el foro de PHP en Foros del Web. Me gustaría poder exportar la base de datos cómodamente desde una página PHP, sin tener que acceder a phpmyadmin > exportar > ... En las ...
  #1 (permalink)  
Antiguo 04/09/2006, 10:39
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 15 años, 3 meses
Puntos: 20
Exportar base de datos

Me gustaría poder exportar la base de datos cómodamente desde una página PHP, sin tener que acceder a phpmyadmin > exportar > ...

En las FAQs dice como hacerlo, y es con el siguiente código. Le he añadido la fecha para el nombre del archivo, así se guarda con la fecha del día (ej. 04-09-06.sql)

El caso es que este se baja, pero al abrirlo devuelve el error:
<H1>Error ejecutando comando: /mysql/bin/mysqldump -u *** --password=*** --opt ***</H1>



Código PHP:
<?
//Ponemos fecha para el nombre de la backup
$fechas date("d/m/y");
// Nombre del archivo de con el cual queremos que se guarde la base de datos
$filename $fechas.".sql"
// Cabezeras para forzar al navegador a guardar el archivo
header("Pragma: no-cache");
header("Expires: 0");
header("Content-Transfer-Encoding: binary");
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=$filename");

$usuario="...";  // Usuario de la base de datos, un ejemplo podria ser 'root'
$passwd="...";  // Contraseña asignada al usuario
$bd="...";  // Nombre de la Base de Datos a exportar

// Funciones para exportar la base de datos
$executa "/mysql/bin/mysqldump -u $usuario --password=$passwd --opt $bd";  
system($executa$resultado);

// Comprobar si se a realizado bien, si no es asi, mostrará un mensaje de error
if ($resultado) { echo "<H1>Error ejecutando comando: $executa</H1>\n"; }

?>
Obviamente, he escondido mis datos de conexión, tanto en las variables como en el error final.
De paso también digo que antes de añadirle lo de las fecha hacía lo mismo.

El servidor es linux.


¿Qué falla?
  #2 (permalink)  
Antiguo 04/09/2006, 12:16
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 16 años, 3 meses
Puntos: 62
;)

prueba con shell_exec($comando)

Código PHP:
$comando="mysqldump -u root -pTuPassword TuDB > DBbackup.sql";
shell_exec($comando); 
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #3 (permalink)  
Antiguo 04/09/2006, 16:18
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 15 años, 3 meses
Puntos: 20
Gracias por contestar. El archivo sigue bajándose en blanco.

Ayuda.
  #4 (permalink)  
Antiguo 04/09/2006, 16:36
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 16 años, 7 meses
Puntos: 4
1.- Tienes que probar ese comando en linea de comandos y ver si te funciona

Yo dejaria el codigo así

Código PHP:
<?
//Ponemos fecha para el nombre de la backup
$fechas date("d/m/y");
// Nombre del archivo de con el cual queremos que se guarde la base de datos
$filename $fechas.".sql"


$usuario="...";  // Usuario de la base de datos, un ejemplo podria ser 'root'
$passwd="...";  // Contraseña asignada al usuario
$bd="...";  // Nombre de la Base de Datos a exportar

// Funciones para exportar la base de datos
$executa "/mysql/bin/mysqldump -u $usuario --password=$passwd --opt $bd";  
system($executa$resultado);

// Comprobar si se a realizado bien, si no es asi, mostrará un mensaje de error
if ($resultado) { echo "<H1>Error ejecutando comando: $executa</H1>\n"; }

// Cabezeras para forzar al navegador a guardar el archivo
// Agrege un par de lineas a prueba de errores comunes
header("Pragma: no-cache");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Transfer-Encoding: binary");
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Length: ".strlen($resultado));
set_time_limit(0);

//quizas solo te falta esta linea
echo $resultado;


?>
  #5 (permalink)  
Antiguo 04/09/2006, 16:58
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 15 años, 3 meses
Puntos: 20
Nada, sigue siendo lo mismo. ¿Para qué el echo $resultado? $Resultado es el error, en caso de haber error.

Ayuda
  #6 (permalink)  
Antiguo 04/09/2006, 17:12
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 16 años, 7 meses
Puntos: 4
se supone que $resultado es el contenido que va a enviar php mediante los headers de apache
  #7 (permalink)  
Antiguo 04/09/2006, 17:13
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 15 años, 3 meses
Puntos: 20
En todo caso, no funciona. Esta línea está mal seguro:

Código PHP:
$executa "/mysql/bin/mysqldump -u $usuario --password=$passwd --opt $bd"
Haga los cambios que haga en esa linea, me da el mismo error...
  #8 (permalink)  
Antiguo 04/09/2006, 17:22
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 16 años, 7 meses
Puntos: 4
quizas sea cosa de permisos, mira cambia esta linea y prueba

Código PHP:
if ($resultado) { echo "<H1>Error ejecutando comando: $resultado</H1>\n"; } 
eso te mostrara el error

revisa estas webs
exec()
http://cl2.php.net/manual/es/function.exec.php
system()
http://cl2.php.net/manual/es/function.system.php

yo he realizado cosas así en windows pero no se como es el tema de los permisos en linux, pero el usuario de php o apache deberia tener permiso al archivo mysqldump
  #9 (permalink)  
Antiguo 04/09/2006, 17:26
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 16 años, 7 meses
Puntos: 4
otra cosa que puedes hacer para testear mejor es sacar todo lo de los headers para ver si te muestra el sql en el navegador

lo que vi es que system() imprime en pantalla por eso no es necesario el
echo $resultado;

el el caso de que ocupes exec() podría servir pero tienes un error que te arroja mysqldump, en eso estamos claros
Código PHP:
<?
//Ponemos fecha para el nombre de la backup
$fechas date("d/m/y");
// Nombre del archivo de con el cual queremos que se guarde la base de datos
$filename $fechas.".sql"


$usuario="root";  // Usuario de la base de datos, un ejemplo podria ser 'root'
$passwd="xxx";  // Contraseña asignada al usuario
$bd="bug720";  // Nombre de la Base de Datos a exportar

// Funciones para exportar la base de datos
$executa "C:\AppServ\mysql\bin\mysqldump.exe -u $usuario --password=$passwd --opt $bd";  


// Comprobar si se a realizado bien, si no es asi, mostrará un mensaje de error
//if ($resultado) { echo "<H1>Error ejecutando comando: $executa</H1>\n"; }

if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression''Off');
    
header("Pragma: public");
    
header("Expires: 0");
    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
header("Cache-Control: private",false);
    
header("Content-type: application/force-download");
    
header("Content-Disposition: filename=\"$filename\";");
    
header("Content-Transfer-Encoding: binary");

set_time_limit(0);
system($executa$resultado);


?>
Ahí si, lo revise y funciona claro que no con mysqldump :) lo probe con $executa="dir"; y si funciona

Edite el codigo ya que lo probe con mysqldump.exe y si me funciono,
estoy seguro que es por problema de permisos

Última edición por Remsankar; 04/09/2006 a las 17:50
  #10 (permalink)  
Antiguo 04/09/2006, 17:42
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 15 años, 3 meses
Puntos: 20
Cita:
quizas sea cosa de permisos, mira cambia esta linea y prueba

Código PHP:
if ($resultado) { echo "<H1>Error ejecutando comando: $resultado</H1>\n"; }
La dejaste igual....

No te he entendido en los últimos mensajes, lo siento
  #11 (permalink)  
Antiguo 04/09/2006, 17:52
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 16 años, 7 meses
Puntos: 4
Cita:
Iniciado por david_M_G Ver Mensaje
La dejaste igual....

No te he entendido en los últimos mensajes, lo siento
si te fijas cambie el $executa por el $resultado

$resultado es el error que te devuelve system()

el error es la consulta que haces en mysqldump
  #12 (permalink)  
Antiguo 04/09/2006, 19:12
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 15 años, 3 meses
Puntos: 20
Pues nada. Que esto sigue sin funcionar...

ayuda
  #13 (permalink)  
Antiguo 05/09/2006, 00:43
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 16 años, 3 meses
Puntos: 62
Has probado a hacerlo desde la linea de comandos?
Es un server local o esta en un hosting?
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #14 (permalink)  
Antiguo 05/09/2006, 15:43
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 15 años, 3 meses
Puntos: 20
Hosting...
  #15 (permalink)  
Antiguo 06/09/2006, 00:43
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 16 años, 3 meses
Puntos: 62
;)

Y que Sistema operativo utiliza?

Código:
$executa = "mysqldump -u $usuario --password=$passwd --opt $bd";
deberia ser:
Código:
$executa = "mysqldump -u ".$usuario." --password=."$passwd." --opt ".$bd;
aunque yo lo hago asi:

Código:
$executa = "mysqldump -u ".$usuario." -p".$passwd." ".$bd." > archivo.sql";
eso en caso de que sea en un servidor GNU/Linux.

si es un servidor Windows y no tiene la ruta de mysqldump en la PATH deberas saber la ruta, bueno eso tambien en GNU/Linux pero normalmente la suele tener.

Suerte!!!
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #16 (permalink)  
Antiguo 02/12/2009, 23:38
Usuario no validado
 
Fecha de Ingreso: agosto-2007
Mensajes: 141
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Exportar base de datos

$executa = "mysqldump -u ".$usuario." -p".$passwd." ".$bd." > archivo.sql";

capo muchas gracias por esa linea, la andaba buscando.
lo que me sucede ahora es que mi base tiene store procedure pero con esa linea no me los guarda en el archivo.sql

probe con
$executa = "mysqldump -R -u ".$usuario." -p".$passwd." ".$bd." > archivo.sql";

-R que busque por ahi pero no funciona, puse el parametro -R al final y tampoco, bueno si sabes como arreglarlo, gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:36.