Foros del Web » Programando para Internet » PHP »

respaldar base de datos grande mysql con php

Estas en el tema de respaldar base de datos grande mysql con php en el foro de PHP en Foros del Web. Que tal modifique el scrip publicado por fran86 para que diera mas opcciones, primeramente un formulario para acceder a respaldar tablas especificas, o la opccion ...
  #1 (permalink)  
Antiguo 21/05/2009, 11:26
 
Fecha de Ingreso: marzo-2008
Mensajes: 30
Antigüedad: 16 años
Puntos: 0
De acuerdo respaldar base de datos grande mysql con php

Que tal modifique el scrip publicado por fran86



para que diera mas opcciones, primeramente un formulario para acceder a respaldar tablas especificas, o la opccion de todas; ademas de poder asignarle el nombre, version de respaldo y si se quiere comprimido o no.

todo trabaja muy bien a exepccion que si selecciono el formulario que me lo de en formato comprimido este no lo puedo abrir, me dice que el archivo esta da#ado, intente con WinRar y 7zip, haber si alguien me puede decir si hay algun error en el codigo para comprimir.

La salida sin comprimir da bien el resultado.

este es el codigo:
Cita:
<?
session_start(); //iniciamos la secion.

//si no hay cookies presentes, redireccionamos al usuario
if(!isset($_SESSION['user'])){
header ("location: ../logout.php");
exit(); //interrumpimos el scrip
}

if (isset($_POST['submit'])){
//Valores obtenidos del formulario
$borrar=$_POST['b']; //borrar
$t=$_POST['t']; //tablas
$c=$_POST['c']; // compresion
$v=$_POST['v']; // version
$co=$_POST['co']; // comentario
$n=$_POST['n']; // nombre

require_once ('../../mysql_connect.php');

// Nombre del fichero que se descargará. */
if ($n==NULL){
$nombre = "Respaldo.txt";
} else {
$nombre = "$n".".txt";
}
// Determina si la tabla será vaciada (si existe) cuando restauremos la tabla. */
if ($borrar==0){
$drop = false;
} elseif ($borrar==1){
$drop = true;
}
/*
* Array que contiene las tablas de la base de datos que seran resguardadas.
* Puede especificarse un valor false para resguardar todas las tablas
* de la base de datos especificada en $bd.
*
* Ejs.:
* $tablas = false;
* o
* $tablas = array("tabla1", "tabla2", "tablaetc");
*
*/
if ($t==0){
$tablas = false;
} elseif ($t==1){
$tablas = array ("tabla1", "tabla2", "tabla3");
} elseif ($t==2){
$tablas = array ("tabla1");
} elseif ($t==3){
$tablas = array ( "tabla2");
} elseif ($t==4){
$tablas = array ("tabla3");
}

/*
* Tipo de compresion.
* Puede ser "gz", "bz2", o false (sin comprimir)
*/
if ($c==0){
$compresion = false; //sin comprimir
} elseif ($c==1){
$compresion = "gz";
} elseif ($c==2){
$compresion = "bz2";
}


/* Se busca las tablas en la base de datos */
if ( empty($tablas) ) {
$consulta = "SHOW TABLES FROM $bd;";
$respuesta = mysql_query($consulta);
while ($fila = mysql_fetch_array($respuesta, MYSQL_NUM)) {
$tablas[] = $fila[0];
}
}


/* Se crea la cabecera del archivo */

$info['dumpversion'] = "$v";
$info ['comentario'] = "$co";

$info['fecha'] = date("d-m-Y");
$info['hora'] = date("h:m:s A");
$info['mysqlver'] = mysql_get_server_info();
$info['phpver'] = phpversion();
ob_start();
print_r($tablas);
$representacion = ob_get_contents();
ob_end_clean ();
preg_match_all('/(\[\d+\] => .*)\n/', $representacion, $matches);
$info['tablas'] = implode("; ", $matches[1]);
$dump = <<<EOT
# +================================================= ==================
# | YoDumpeo! {$info['dumpversion']}
# | por fran86 <[email protected]>
# |
# | Generado el {$info['fecha']} a las {$info['hora']}
# | comentario adiccional: {$info['comentario']}
# | Servidor: {$_SERVER['HTTP_HOST']}
# | MySQL Version: {$info['mysqlver']}
# | PHP Version: {$info['phpver']}
# | Base de datos: '$bd'
# | Tablas: {$info['tablas']}
# |
# +-------------------------------------------------------------------

EOT;
foreach ($tablas as $tabla) {

$drop_table_query = "";
$create_table_query = "";
$insert_into_query = "";

/* Se halla el query que será capaz vaciar la tabla. */
if ($drop) {
$drop_table_query = "DROP TABLE IF EXISTS `$tabla`;";
} else {
$drop_table_query = "# No especificado.";
}

/* Se halla el query que será capaz de recrear la estructura de la tabla. */
$create_table_query = "";
$consulta = "SHOW CREATE TABLE $tabla;";
$respuesta = mysql_query($consulta);
while ($fila = mysql_fetch_array($respuesta, MYSQL_NUM)) {
$create_table_query = $fila[1].";";
}

/* Se halla el query que será capaz de insertar los datos. */
$insert_into_query = "";
$consulta = "SELECT * FROM $tabla;";
$respuesta = mysql_query($consulta);
while ($fila = mysql_fetch_array($respuesta, MYSQL_ASSOC)) {
$columnas = array_keys($fila);
foreach ($columnas as $columna) {
if ( gettype($fila[$columna]) == "NULL" ) {
$values[] = "NULL";
} else {
$values[] = "'".mysql_real_escape_string($fila[$columna])."'";
}
}
$insert_into_query .= "INSERT INTO `$tabla` VALUES (".implode(", ", $values).");\n";
unset($values);
}

$dump .= <<<EOT

# | Vaciado de tabla '$tabla'
# +------------------------------------->
$drop_table_query


# | Estructura de la tabla '$tabla'
# +------------------------------------->
$create_table_query


# | Carga de datos de la tabla '$tabla'
# +------------------------------------->
$insert_into_query

EOT;
}

/* Envio */
if ( !headers_sent() ) {
header("Pragma: no-cache");
header("Expires: 0");
header("Content-Transfer-Encoding: binary");
switch ($compresion) {
case "gz":
header("Content-Disposition: attachment; filename=$nombre.gz");
header("Content-type: application/x-gzip");
echo gzencode($dump, 9);
break;
case "bz2":
header("Content-Disposition: attachment; filename=$nombre.bz2");
header("Content-type: application/x-bzip2");
echo bzcompress($dump, 9);
break;
default:
header("Content-Disposition: attachment; filename=$nombre");
header("Content-type: application/force-download");
echo $dump;
}
} else {
echo "<b>ATENCION: Probablemente ha ocurrido un error</b><br />\n<pre>\n$dump\n</pre>";
}

mysql_close();
} else {
?>
<style type="text/css">
<!--
.Estilo1 {font-size: x-small}
.Estilo2 {color: #0000FF}
-->
</style>


<link href="estilos annclass.css" rel="stylesheet" type="text/css" />
<h1 align="center" class="Estilo2">Formulario para respaldar base de datos</h1>
<form name="form01" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table width="900" align="center">
<tr>
<td width="442"><div align="right">Seleccione las tablas a respaldar</div></td>
<td width="446">
<select name="t">
<option value="0">Todos </option>
<option value="1">Solo las principales</option>
<option value="2">Temporal</option>
<option value="3">La de cierre</option>
<option value="4">Por autorizar</option>
</select></td>
</tr>
<tr>
<td><div align="right">Seleccione si desea algun tipo de compresion</div></td>
<td><select name="c">
<option value="0">Ninguna</option>
<option value="1">gz</option>
<option value="2">vg2</option>
</select></td>
</tr>
<tr>
<td><div align="right">Version del respaldo</div></td>
<td><input type="text" name="v" maxlength="20" size="20" /></td>
</tr>
<tr>
<td><div align="right" class="Estilo2">Nombre del archivo</div></td>
<td><input type="text" name="n" size="20" maxlength="20" />
<span class="Estilo1">Sin espacios</span></td>
</tr>
<tr>
<td><div align="right">Comentario adiccional</div></td>
<td><input type="text" name="co" size="40" maxlength="40" /></td>
</tr>
<tr>
<td><div align="right">Desea borrar las tablas despues de respaldarlas?</div></td>
<td><select name="b">
<option value="0">No</option>
<option value="1">Si</option>
</select></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" value="Respaldar" name="submit" />
</div></td>
</tr>
</table>
</form>
<?
}

?>
  #2 (permalink)  
Antiguo 21/05/2009, 14:52
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: respaldar base de datos grande mysql con php

es un tema de programación mas que de base de datos
Talves te vendria bien usar una clase o función echa en php que genere archivos comprimidos .. en internet hay infinidad

Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #3 (permalink)  
Antiguo 25/05/2009, 11:44
 
Fecha de Ingreso: marzo-2008
Mensajes: 30
Antigüedad: 16 años
Puntos: 0
Respuesta: respaldar base de datos grande mysql con php

ok, gracias, por tu ayuda.

pero tambien me gustaria conocer cual es la solucion para ese problema planteado.
  #4 (permalink)  
Antiguo 26/05/2009, 08:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: respaldar base de datos grande mysql con php

Tema trasladado desde Bases de Datos

http://www.forosdelweb.com/f21/funci...-datos-413499/
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 07:51.