aporte sistema de respaldo y restauracion de bases de datos

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

Upload: wilson-donis

Post on 10-Dec-2015

213 views

Category:

Documents


0 download

DESCRIPTION

aportes

TRANSCRIPT

Page 1: Aporte Sistema de Respaldo y Restauracion de Bases de Datos

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.phpCó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.phpCó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."");

Page 2: Aporte Sistema de Respaldo y Restauracion de Bases de Datos

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 

Page 3: Aporte Sistema de Respaldo y Restauracion de Bases de Datos

{     $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.phpCó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...

Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

eXelente!!!!, muy buena aportación (y)!!! __________________

Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

excelente aporte muy bueno __________________

Page 4: Aporte Sistema de Respaldo y Restauracion de Bases de Datos

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

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")

Page 5: Aporte Sistema de Respaldo y Restauracion de Bases de Datos

        {         // 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);

Page 6: Aporte Sistema de Respaldo y Restauracion de Bases de Datos

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

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!!!!!

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

Page 7: Aporte Sistema de Respaldo y Restauracion de Bases de Datos

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. ?>

__________________

Page 8: Aporte Sistema de Respaldo y Restauracion de Bases de Datos

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

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!!!!!!!

Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

Cita: Iniciado por abd 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

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?

Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

Cita: Iniciado por abd 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

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

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

Respuesta: Aporte Sistema de respaldo y restauracion de bases de datos

Page 9: 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á???