Foros del Web » Programando para Internet » PHP »

Aporte Sistema de respaldo y restauracion de bases de datos

Estas en el tema de Aporte Sistema de respaldo y restauracion de bases de datos en el foro de PHP en Foros del Web. Mucho se ha preguntado como hacer un respaldo de bases de datos y luego restaurar la misma...ahora les doy una pequeña opcion para hacerlo espero ...
  #1 (permalink)  
Antiguo 10/06/2011, 15:43
Avatar de Deathmetalrules  
Fecha de Ingreso: diciembre-2010
Ubicación: Mas - aya
Mensajes: 65
Antigüedad: 14 años
Puntos: 8
Información Aporte Sistema de respaldo y restauracion de bases de datos

Mucho se ha preguntado como hacer un respaldo de bases de datos y luego restaurar la misma...ahora les doy una pequeña opcion para hacerlo espero que les sirva y que mi aporte sea de gran ayuda.

primero creamos el archivo de conexion al q llamaremos conexion.php
Código PHP:
<?php
error_reporting
(E_ERROR E_PARSE E_CORE_ERROR);
$servername='';//localhost
$dbusername='';//root
$dbpassword='';//tupass
$dbname='';//tuclave
connecttodb($servername,$dbname,$dbusername,$dbpassword);
function 
connecttodb($servername,$dbname,$dbusername,$dbpassword)
{
$link=mysql_connect ($servername,$dbusername,$dbpassword);
if(!
$link)
{
die(
'No puedo Conectarme al Administrador MySQL'.mysql_error());
}
mysql_select_db($dbname,$link)
or die (
'No puedo seleccionar la base de datos'.mysql_error());
}
?>
segundo creamos el archivo de respaldo al que llamaremos backup.php
Código PHP:
<?php
include("conexion.php");
$fechaDeLaCopia "-".date("d-l-F-Y");    
$ficheroDeLaCopia =$dbname.$fechaDeLaCopia.".sql";
$sistema="show variables where variable_name= 'basedir'";
$restore=mysql_query($sistema);
$DirBase=mysql_result($restore,0,"value");
$primero=substr($DirBase,0,1);
if (
$primero=="/") {
    
$DirBase="mysqldump";
    

else 
{
    
$DirBase=$DirBase."bin\mysqldump";
     
}

$executa="$DirBase --host=$servername --user=$dbusername --password=$dbpassword -R -c  --add-drop-table $dbname > $ficheroDeLaCopia";
system($executa);

header"Content-Disposition: attachment; filename=".$ficheroDeLaCopia."");
header("Content-type: application/force-download");
@
readfile($ficheroDeLaCopia);

unlink($ficheroDeLaCopia);

?>

tercero creamos el archivo para restaurar el backup.sql al que llamaremos restore.php

Código PHP:
<?php
include ("conexion.php");
echo
'<title>Restore & backup para windows y linux</title>';
if (!isset (
$_FILES["ficheroDeCopia"]))
{
$contenidoDeFormulario="<form action='restoreback.php' method='post' enctype='multipart/form-data' name='formularioDeRestauracion'";
$contenidoDeFormulario.="id='formularioDeRestauracion'>\n";
$contenidoDeFormulario.="<table width='360' border='0' align='center' class='normal' cellspacing='7'>\n";
$contenidoDeFormulario.="<tr>\n";
$contenidoDeFormulario.="<td colspan='4' align=center>Indique el origen del archivo de copia: </td>\n";
$contenidoDeFormulario.="</tr>\n";
$contenidoDeFormulario.="<td colspan='2' align=center><input type='file' name='ficheroDeCopia' id='ficheroDeCopia'";
$contenidoDeFormulario.="size='30'></td>\n";
$contenidoDeFormulario.="<tr>\n";
$contenidoDeFormulario.="<td colspan='3' align='center'><input name='envio' type='submit' ";
$contenidoDeFormulario.="id='envio' value='[ Aceptar ]'></td>\n";
$contenidoDeFormulario.="</tr>\n";
$contenidoDeFormulario.="</tbody>\n";
$contenidoDeFormulario.="</table>\n";
$contenidoDeFormulario.="</form>\n";
echo (
$contenidoDeFormulario);
}
 else 
 {
 
$archivoRecibido=$_FILES["ficheroDeCopia"]["tmp_name"];
 
$destino="./ficheroParaRestaurar.sql";
    
if (!
move_uploaded_file ($archivoRecibido$destino))
{
$mensaje='EL proceso ha fallado';
echo 
$mensaje;
}
$sistema="show variables where variable_name= 'basedir'";
$restore=mysql_query($sistema);
$DirBase=mysql_result($restore,0,"value");
$primero=substr($DirBase,0,1);
if (
$primero=="/") {
    
$DirBase="bin/mysql";

else 
{
    
$DirBase=$DirBase."bin\mysql";
}
$executa "$DirBase -h $servername -u $dbusername --password=$dbpassword  $dbname < $destino";
system($executa,$resultado);
if (
$resultado

echo 
"<H3>Error ejecutando comando: $executa</H3>\n";
$mensaje="ERROR. La copia de seguridad no se ha restaurado.";
$cabecera="COPIA DE SEGURIDAD NO RESTAURADA";
echo 
$mensaje;
echo 
"<meta http-equiv='Refresh' content='3;url=index.php'>";

else 
{
    
$mensaje2="La copia de seguridad se ha restaurado correctamente."
    
$cabecera2="COPIA DE SEGURIDAD RESTAURADA";
    echo 
$mensaje2;
    echo 
"<meta http-equiv='Refresh' content='3;url=index.php'>";
}

unlink ("ficheroParaRestaurar.sql");
    
}

?>
ahora simplemente creamos el index.php
Código PHP:
<?php
include("conexion.php");
echo
'<title>Restore & backup para windows y linux</title>';
echo
'<ul><li><a href="backup.php">Probar backup de BD</a></li>';
echo
'<li><a href="restore.php">Probar restore de BD</a></li></ul>';
?>

mmmm.... acabo de recordar algo este codigo solo ha sido probado de manera local en S.O (windows y linux) y agradeceria enteramente que alguien lo hiciera de forma remota. y me avisara que pasa... No soy ningun experto en php pero me gusta coolaborar en algo...
  #2 (permalink)  
Antiguo 10/06/2011, 16:10
Avatar de hector2c  
Fecha de Ingreso: noviembre-2007
Ubicación: Perú - Tacna
Mensajes: 979
Antigüedad: 17 años
Puntos: 25
Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

eXelente!!!!, muy buena aportación (y)!!!
__________________
blog: hector2c.wordpress.com
email: [email protected]
  #3 (permalink)  
Antiguo 10/06/2011, 16:13
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 14 años, 2 meses
Puntos: 511
Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

excelente aporte muy bueno
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125

Última edición por skiper0125; 10/06/2011 a las 16:19
  #4 (permalink)  
Antiguo 13/06/2011, 15:13
Avatar de Deathmetalrules  
Fecha de Ingreso: diciembre-2010
Ubicación: Mas - aya
Mensajes: 65
Antigüedad: 14 años
Puntos: 8
Información Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

gracias por haberse interesado, retomando el tema tome como punto de partida otro script del compañero mgusdl el cual genera un backup con compresion .zip lo probe pero tenia cierto inconvenientes pero aca esta el nuevo script.... es valido aclarar que este toma todas las bases de datos y las comprime en un solo archivo

Código PHP:
<?php
#############################################
#
# Tarea de copia seguridad de todas las bases de datos en MySQL
#
# CopyLeft, puedes hacer con este script lo que te de la gana
#
#############################################
set_time_limit(0);
header("Content-type: text/plain; charset=UTF-8");
echo 
date("Y-m-d H:i"time()) . " Creando copia de seguridad MySQL...\r\n";

// Datos de acceso a MySQL
$myhost "localhost";
$myuser 'root';
$mypass '';//tu pass
$DB mysql_connect($myhost$myuser$mypass) or die(date("Y-m-d H:i"time()) . " ERROR!! No se pudo conectar a MySQL.\r\n");

// Otros parámetros
$OUTDIR "./backup/"// Cambiar segun necesidades y tipo servidor
$now date("d-l-F-Y"time());
$outfile "MySQL-$now-.zip";
$periodo time() - 259200// Los archivos anteriores a este periodo (3 dias = 259200 segundos) serán borrados

// Crear nuevo archivo ZIP
# Más información sobre la clase PHP
# http://es.php.net/manual/en/class.ziparchive.php
echo date("Y-m-d H:i"time()) . " Creando '$OUTDIR$outfile' ... ";
$zip = new ZipArchive;
if (!
$zip->open("$OUTDIR$outfile"ZIPARCHIVE::CREATE)) die("ERROR!!\r\n");
echo 
"OK.\r\n";

// Tomar un listado de bases de datos
$q mysql_query("SHOW DATABASES");
// Volcar todas las bases
while ($database mysql_fetch_row($q))
    if (
$database[0] != "information_schema" && $database[0] != "mysql")
        {
        
// Nombrar archivo
        
$filename "{$database[0]}.sql";
        
$tempfile date("YmdHis"time()) . ".~swap";

        echo 
date("Y-m-d H:i"time()) . " Volcando '$filename' ... ";
        
$sistema="show variables where variable_name= 'basedir'";
        
$restore=mysql_query($sistema);
        
$DirBase=mysql_result($restore,0,"value");
        
$primero=substr($DirBase,0,1);
        if (
$primero=="/") {
        
$DirBase="mysqldump";
                } 
        else 
        {
        
$DirBase=$DirBase."bin\mysqldump";
         }
        
// Volcar datos
        
$executa="$DirBase --host=$myhost --user=$myuser --password=$mypass -R -c --add-drop-table {$database[0]}  > $OUTDIR$tempfile";
        
system($executa,$resultado);

        echo 
"OK.\r\n"
        
date("Y-m-d H:i"time()) . " Agregando '$filename' a '$outfile' ... ";

        
//  Agregar archivo al ZIP
        
$zip->addFile($OUTDIR.$tempfile$filename);

        
// Recordar los temporales utilizados
        
$DUMPFILES[] = $OUTDIR.$tempfile;

        echo 
"OK.\r\n";
        }

// Desconectar de la base de datos
mysql_close($DB);

// Cerrar archivo ZIP
$zip->close();

// Eliminar temporales. Importante hacerlo DESPUÉS de cerrar el ZIP
foreach($DUMPFILES as $file)
   
unlink($file);
// Elminar archivos antiguos
echo date("Y-m-d H:i"time()) . " Eliminando copias antiguas...\r\n";
$D opendir($OUTDIR);
while (
$F readdir($D))
    if (
$F != "." && $F != "..")
        if (
filectime($OUTDIR.$F) < $periodo)
            if (!
unlink($OUTDIR.$F))
                echo 
date("Y-m-d H:i"time()) . " No se pudo eliminar el archivo $F.\r\n";        
closedir($D);

echo 
date("Y-m-d H:i"time()) . " Tarea finalizada.\r\n";
?>

quisiera que probaran ambos aportes de forma remota...y si es posible avisarme que sucede....se los agradeceria
__________________
Un nuevo horizonte
  #5 (permalink)  
Antiguo 08/08/2011, 15:15
abd
 
Fecha de Ingreso: septiembre-2008
Mensajes: 8
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

Hola me llamo Arnaldo tome tu script como ejemplo en un modulo de administrador que estoy usando y el mismo me manda este error

Not Found

The requested URL /SICCAC/restore.php was not found on this server.

por supuesto cambie la denominacion de la bd el username y la contraseña en el archivo conexion el archivo backup funciona perfecto muchas gracias saludos!!!!!
  #6 (permalink)  
Antiguo 08/08/2011, 15:22
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

Te falta el archivo restore.php que es este:

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='restoreback.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="./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=index.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=index.php'>";
  60. }
  61.  
  62. unlink ("ficheroParaRestaurar.sql");
  63.      
  64. }
  65.  
  66. ?>
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #7 (permalink)  
Antiguo 09/08/2011, 08:59
abd
 
Fecha de Ingreso: septiembre-2008
Mensajes: 8
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

De verdad que ese codigo esta super excelente !!!!! tremendo aporte ya lo probé son grandes muchachos!!!!! gracias!!!!!!!
  #8 (permalink)  
Antiguo 10/08/2011, 16:45
Avatar de Deathmetalrules  
Fecha de Ingreso: diciembre-2010
Ubicación: Mas - aya
Mensajes: 65
Antigüedad: 14 años
Puntos: 8
Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

Cita:
Iniciado por abd Ver Mensaje
De verdad que ese codigo esta super excelente !!!!! tremendo aporte ya lo probé son grandes muchachos!!!!! gracias!!!!!!!

Gracias a todos los coolaboradores ,espero que lo sepan aprovechar al maximo y que verifiquen aspectos de seguridad
__________________
Un nuevo horizonte
  #9 (permalink)  
Antiguo 12/08/2011, 15:11
abd
 
Fecha de Ingreso: septiembre-2008
Mensajes: 8
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

una pregunta que es exactamente restoreback.php se puede poner el nombre restore es decir el nombre del mismo archivo de restore?
  #10 (permalink)  
Antiguo 16/08/2011, 10:26
Avatar de Deathmetalrules  
Fecha de Ingreso: diciembre-2010
Ubicación: Mas - aya
Mensajes: 65
Antigüedad: 14 años
Puntos: 8
Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

Cita:
Iniciado por abd Ver Mensaje
una pregunta que es exactamente restoreback.php se puede poner el nombre restore es decir el nombre del mismo archivo de restore?
restore back se refiere al segundo archivo....es decir donde se comprimen todas las bases de datos existentes... cualquier duda pregunta...
__________________
Un nuevo horizonte
  #11 (permalink)  
Antiguo 15/05/2012, 08:01
Avatar de fabrikt  
Fecha de Ingreso: mayo-2012
Ubicación: Parana, Entre Rios
Mensajes: 12
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

Use los scripts pero no logro restaurar la base de datos que podra ser? si alguien me puede ayudar le agradeceria
  #12 (permalink)  
Antiguo 15/05/2012, 14:13
Avatar de Deathmetalrules  
Fecha de Ingreso: diciembre-2010
Ubicación: Mas - aya
Mensajes: 65
Antigüedad: 14 años
Puntos: 8
Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

seria bueno que pongas el tipo de error o la linea el archivo php que has modificado
__________________
Un nuevo horizonte
  #13 (permalink)  
Antiguo 01/10/2012, 13:16
 
Fecha de Ingreso: octubre-2012
Mensajes: 1
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

Yo probé esta solución y todo bien, pero algunas veces se demora bastante, porque será???

Etiquetas: bases, respaldo, restauracion, sistema
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.
Tema Cerrado

SíEste tema le ha gustado a 6 personas




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