Sunteți pe pagina 1din 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 pequea 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
Cdigo 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


Cdigo 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


Cdigo 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' enc
type='multipart/form-data' name='formularioDeRestauracion'";
$contenidoDeFormulario.="id='formularioDeRestauracion'>\n";
$contenidoDeFormulario.="<table width='360' border='0' align='center' cl
ass='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='env
io' 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


Cdigo 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 aportacin (y)!!!
__________________

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

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 compaero 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
Cdigo 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 parmetros
$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) sern borrados
// Crear nuevo archivo ZIP
# Ms informacin 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$tempfi
le";
system($executa,$resultado);
echo "OK.\r\n"
. date("Y-m-d H:i", time()) . " Agregando '$filename' a '$outfil
e' ... ";
// 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 DESPUS 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 e
l 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

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 contrasea 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:
Cdigo 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 ms fcil 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


Yo prob esta solucin y todo bien, pero algunas veces se demora bastante, porque
ser???

S-ar putea să vă placă și