Foros del Web » Programando para Internet » PHP »

Restaurar backup de base de datos mysql con php

Estas en el tema de Restaurar backup de base de datos mysql con php en el foro de PHP en Foros del Web. Buenos días, Tengo el siguiente inconveniente: Estoy implementando un script de Deathmetalrules en el siguiente enlace [URL="http://www.forosdelweb.com/f18/aporte-sistema-respaldo-restauracion-bases-datos-920487/"]http://www.forosdelweb.com/f18/aporte-sistema-respaldo-restauracion-bases-datos-920487/[/URL] el cual genera un backup de mi bd ...
  #1 (permalink)  
Antiguo 14/08/2016, 08:05
 
Fecha de Ingreso: julio-2015
Mensajes: 16
Antigüedad: 8 años, 9 meses
Puntos: 1
Restaurar backup de base de datos mysql con php

Buenos días,

Tengo el siguiente inconveniente:

Estoy implementando un script de Deathmetalrules en el siguiente enlace [URL="http://www.forosdelweb.com/f18/aporte-sistema-respaldo-restauracion-bases-datos-920487/"]http://www.forosdelweb.com/f18/aporte-sistema-respaldo-restauracion-bases-datos-920487/[/URL] el cual genera un backup de mi bd mysql con php y por otro lado puedo restaurar la misma desde cualquier respaldo generado que yo seleccione, el problema se presenta al momento de intentar restaurar mi bd a un estado anterior, indicándome el siguiente error:

Error ejecutando comando: C:/xampp/mysqlbin/mysql -h localhost -u root --password= comprobantes < C:/Respaldo/ficheroParaRestaurar.sql
ERROR. La copia de seguridad no se ha restaurado

Por lo que entiendo el error se encuentra en la linea del comando executa del archivo restore pero no logro identificar el porque,

A continuacion los 3 archivos que implemento:

conexion.php
Código PHP:
Ver original
  1. <?php
  2. error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR);
  3. $servername='localhost';//localhost
  4. $dbusername='root';//root
  5. $dbpassword='';//tupass
  6. $dbname='comprobantes';//tuclave
  7. connecttodb($servername,$dbname,$dbusername,$dbpassword);
  8. function connecttodb($servername,$dbname,$dbusername,$dbpassword)
  9. {
  10. $link=mysql_connect ($servername,$dbusername,$dbpassword);
  11. if(!$link)
  12. {
  13. die('No puedo Conectarme al Administrador MySQL'.mysql_error());
  14. }
  15. mysql_select_db($dbname,$link)
  16. or die ('No puedo seleccionar la base de datos'.mysql_error());
  17. }
  18. ?>

backup.php
Código PHP:
Ver original
  1. <?php
  2. include("conexion.php");
  3. $fechaDeLaCopia = "-".date("d-l-F-Y");    
  4. $ficheroDeLaCopia =$dbname.$fechaDeLaCopia.".sql";
  5. $sistema="show variables where variable_name= 'basedir'";
  6. $restore=mysql_query($sistema);
  7. $DirBase=mysql_result($restore,0,"value");
  8. $primero=substr($DirBase,0,1);
  9. if ($primero=="/") {
  10.     $DirBase="mysqldump";
  11.      
  12. }  
  13. else  
  14. {
  15.     $DirBase=$DirBase."bin\mysqldump";
  16.      
  17. }
  18.  
  19. $executa="$DirBase --host=$servername --user=$dbusername --password=$dbpassword -R -c  --add-drop-table $dbname > $ficheroDeLaCopia";
  20. system($executa);
  21.  
  22. header( "Content-Disposition: attachment; filename=".$ficheroDeLaCopia."");
  23. header("Content-type: application/force-download");
  24. @readfile($ficheroDeLaCopia);
  25.  
  26. unlink($ficheroDeLaCopia);
  27.  
  28. ?>

restore.php
Código PHP:
Ver original
  1. <?php
  2. include ("conexion.php");
  3. echo'<title>Restore & backup para windows y linux</title>';
  4. if (!isset ($_FILES["ficheroDeCopia"]))
  5. {
  6. $contenidoDeFormulario="<form action='restore.php' method='post' enctype='multipart/form-data' name='formularioDeRestauracion'";
  7. $contenidoDeFormulario.="id='formularioDeRestauracion'>\n";
  8. $contenidoDeFormulario.="<table width='360' border='0' align='center' class='normal' cellspacing='7'>\n";
  9. $contenidoDeFormulario.="<tr>\n";
  10. $contenidoDeFormulario.="<td colspan='4' align=center>Indique el origen del archivo de copia: </td>\n";
  11. $contenidoDeFormulario.="</tr>\n";
  12. $contenidoDeFormulario.="<td colspan='2' align=center><input type='file' name='ficheroDeCopia' id='ficheroDeCopia'";
  13. $contenidoDeFormulario.="size='30'></td>\n";
  14. $contenidoDeFormulario.="<tr>\n";
  15. $contenidoDeFormulario.="<td colspan='3' align='center'><input name='envio' type='submit' ";
  16. $contenidoDeFormulario.="id='envio' value='[ Aceptar ]'></td>\n";
  17. $contenidoDeFormulario.="</tr>\n";
  18. $contenidoDeFormulario.="</tbody>\n";
  19. $contenidoDeFormulario.="</table>\n";
  20. $contenidoDeFormulario.="</form>\n";
  21. echo ($contenidoDeFormulario);
  22. }
  23.  else  
  24.  {
  25.  $archivoRecibido=$_FILES["ficheroDeCopia"]["tmp_name"];
  26.  $destino="C:/Respaldo/ficheroParaRestaurar.sql";
  27.      
  28. if (!move_uploaded_file ($archivoRecibido, $destino))
  29. {
  30. $mensaje='EL proceso ha fallado';
  31. echo $mensaje;
  32. }
  33. $sistema="show variables where variable_name= 'basedir'";
  34. $restore=mysql_query($sistema);
  35. $DirBase=mysql_result($restore,0,"value");
  36. $primero=substr($DirBase,0,1);
  37. if ($primero=="/") {
  38.     $DirBase="bin/mysql";
  39. }  
  40. else  
  41. {
  42.     $DirBase=$DirBase."bin\mysql";
  43. }
  44. $executa = "$DirBase -h $servername -u $dbusername --password=$dbpassword  $dbname < $destino";
  45. system($executa,$resultado);
  46. if ($resultado)  
  47. {  
  48. echo "<H3>Error ejecutando comando: $executa</H3>\n";
  49. $mensaje="ERROR. La copia de seguridad no se ha restaurado.";
  50. $cabecera="COPIA DE SEGURIDAD NO RESTAURADA";
  51. echo $mensaje;
  52. echo "<meta http-equiv='Refresh' content='3;url=config-sistema.php'>";
  53. }  
  54. else  
  55. {
  56.     $mensaje2="La copia de seguridad se ha restaurado correctamente.";  
  57.     $cabecera2="COPIA DE SEGURIDAD RESTAURADA";
  58.     echo $mensaje2;
  59.     echo "<meta http-equiv='Refresh' content='3;url=config-sistema.php'>";
  60. }
  61.  
  62. unlink ("ficheroParaRestaurar.sql");
  63.      
  64. }
  65.  
  66. ?>

Muchas gracias de antemano por la ayuda que me puedan brindar
  #2 (permalink)  
Antiguo 16/08/2016, 00:24
Avatar de Aleph  
Fecha de Ingreso: agosto-2001
Ubicación: Kenolandia
Mensajes: 1.061
Antigüedad: 22 años, 8 meses
Puntos: 3
Respuesta: Restaurar backup de base de datos mysql con php

Hay muchos errores en tu código. Revisa todo con atención. Según tu código, si la función system devuelve "true" se muestra un error en pantalla.

system($executa,$resultado);
if ($resultado)
{
echo "<H3>Error ejecutando comando: $executa</H3>\n";
...
}

Debería ser if(!$resultado), ya que la función system devuelve false si hay un error.

Lo peor de todo es que no importa si haya salido bien o mal, igual borrás el archivo de backup:

unlink ("ficheroParaRestaurar.sql");

Saludos.
__________________
El Chorizo Comunista

Etiquetas: bd, mysql, restaurar
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 04:22.