Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/07/2011, 19:02
oscarbt
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: Cómo hacer un respaldo a Base de Datos Mysql mediante php en un formlulari

Para exportar una copia:
//En el formulario
Código HTML:
Ver original
  1. <a href="backup.php">Copia de seguridad</a>

archivo backup.php:

Código PHP:
Ver original
  1. <?php
  2. //aca los parametros de conexion, si tienes aparte la conexión , solo incluyuela
  3. $usuario="tu_usuario";
  4. $passwd="tu_password";
  5. $host="localhost";
  6. $bd="tu_base_datos";
  7. $nombre="backup.txt"; //Este es el nombre del archivo a generar
  8. /* Determina si la tabla será vaciada (si existe) cuando  restauremos la tabla. */            
  9. $drop = false;
  10. $tablas = false; //tablas de la bd
  11. // Tipo de compresion.
  12. // Puede ser "gz", "bz2", o false (sin comprimir)
  13.  
  14. $compresion = false;
  15.  
  16. /* Conexion */
  17. $conexion = mysql_connect($host, $usuario, $passwd)
  18. or die("No se puede conectar con el servidor MySQL: ".mysql_error());
  19. mysql_select_db($bd, $conexion)
  20. or die("No se pudo seleccionar la Base de Datos: ". mysql_error());
  21. /* Se busca las tablas en la base de datos */
  22. if ( empty($tablas) ) {
  23.     $consulta = "SHOW TABLES FROM $bd;";
  24.     $respuesta = mysql_query($consulta, $conexion)
  25.     or die("No se pudo ejecutar la consulta: ".mysql_error());
  26.     while ($fila = mysql_fetch_array($respuesta, MYSQL_NUM)) {
  27.         $tablas[] = $fila[0];
  28.     }
  29. }
  30. /* Se crea la cabecera del archivo */
  31. $info['dumpversion'] = "1.1b";
  32. $info['fecha'] = date("d-m-Y");
  33. $info['hora'] = date("h:m:s A");
  34. $info['mysqlver'] = mysql_get_server_info();
  35. $info['phpver'] = phpversion();
  36. print_r($tablas);
  37. $representacion = ob_get_contents();
  38. preg_match_all('/(\[\d+\] => .*)\n/', $representacion, $matches);
  39. $info['tablas'] = implode(";  ", $matches[1]);
  40. $dump = <<<EOT
  41. # +===================================================================
  42. # |
  43. # | Generado el {$info['fecha']} a las {$info['hora']}
  44. # | Servidor: {$_SERVER['HTTP_HOST']}
  45. # | MySQL Version: {$info['mysqlver']}
  46. # | PHP Version: {$info['phpver']}
  47. # | Base de datos: '$bd'
  48. # | Tablas: {$info['tablas']}
  49. # |
  50. # +-------------------------------------------------------------------
  51.  
  52. EOT;
  53. foreach ($tablas as $tabla) {
  54.    
  55.     $drop_table_query = "";
  56.     $create_table_query = "";
  57.     $insert_into_query = "";
  58.    
  59.     /* Se halla el query que será capaz vaciar la tabla. */
  60.     if ($drop) {
  61.         $drop_table_query = "DROP TABLE IF EXISTS `$tabla`;";
  62.     } else {
  63.         $drop_table_query = "# No especificado.";
  64.     }
  65.  
  66.     /* Se halla el query que será capaz de recrear la estructura de la tabla. */
  67.     $create_table_query = "";
  68.     $consulta = "SHOW CREATE TABLE $tabla;";
  69.     $respuesta = mysql_query($consulta, $conexion)
  70.     or die("No se pudo ejecutar la consulta: ".mysql_error());
  71.     while ($fila = mysql_fetch_array($respuesta, MYSQL_NUM)) {
  72.             $create_table_query = $fila[1].";";
  73.     }
  74.    
  75.     /* Se halla el query que será capaz de insertar los datos. */
  76.     $insert_into_query = "";
  77.     $consulta = "SELECT * FROM $tabla;";
  78.     $respuesta = mysql_query($consulta, $conexion)
  79.     or die("No se pudo ejecutar la consulta: ".mysql_error());
  80.     while ($fila = mysql_fetch_array($respuesta, MYSQL_ASSOC)) {
  81.             $columnas = array_keys($fila);
  82.             foreach ($columnas as $columna) {
  83.                 if ( gettype($fila[$columna]) == "NULL" ) {
  84.                     $values[] = "NULL";
  85.                 } else {
  86.                     $values[] = "'".mysql_real_escape_string($fila[$columna])."'";
  87.                 }
  88.             }
  89.             $insert_into_query .= "INSERT INTO `$tabla` VALUES (".implode(", ", $values).");\n";
  90.             unset($values);
  91.     }
  92.    
  93. $dump .= <<<EOT
  94.  
  95. # | Vaciado de tabla '$tabla'
  96. # +------------------------------------->
  97. $drop_table_query
  98.  
  99.  
  100. # | Estructura de la tabla '$tabla'
  101. # +------------------------------------->
  102. $create_table_query
  103.  
  104.  
  105. # | Carga de datos de la tabla '$tabla'
  106. # +------------------------------------->
  107. $insert_into_query
  108.  
  109. EOT;
  110. }
  111.  
  112. /* Envio */
  113. if ( !headers_sent() ) {
  114.     header("Pragma: no-cache");
  115.     header("Expires: 0");
  116.     header("Content-Transfer-Encoding: binary");
  117.     switch ($compresion) {
  118.     case "gz":
  119.         header("Content-Disposition: attachment; filename=$nombre.gz");
  120.         header("Content-type: application/x-gzip");
  121.         echo gzencode($dump, 9);
  122.         break;
  123.     case "bz2":
  124.         header("Content-Disposition: attachment; filename=$nombre.bz2");
  125.         header("Content-type: application/x-bzip2");
  126.         echo bzcompress($dump, 9);
  127.         break;
  128.     default:
  129.         header("Content-Disposition: attachment; filename=$nombre");
  130.         header("Content-type: application/force-download");
  131.         echo $dump;
  132.     }
  133. } else {
  134.     echo "<b>ATENCION: Probablemente ha ocurrido un error</b><br />\n<pre>\n$dump\n</pre>";
  135. }
  136.  
  137. ?>

Pruebalo y me cuentas...