Foros del Web » Programando para Internet » PHP »

Cómo hacer un respaldo a Base de Datos Mysql mediante php en un formlulario

Estas en el tema de Cómo hacer un respaldo a Base de Datos Mysql mediante php en un formlulario en el foro de PHP en Foros del Web. Buenas. Quiero hacer 2 formularios que permitan que el administrador de un sistema pueda hacer respaldo de la base de datos, exportarla e importarla. Son ...
  #1 (permalink)  
Antiguo 22/07/2011, 18:00
 
Fecha de Ingreso: julio-2010
Mensajes: 75
Antigüedad: 13 años, 8 meses
Puntos: 2
Cómo hacer un respaldo a Base de Datos Mysql mediante php en un formlulario

Buenas. Quiero hacer 2 formularios que permitan que el administrador de un sistema pueda hacer respaldo de la base de datos, exportarla e importarla. Son opciones que quiero presentar cada una en un formulario y que mediante un botón pueda realizar las mismas. Alguien sabe cómo hacer esto? Estoy trabajando con mysql , php y WAMP server.

Les agradezco su ayuda por favor!!!!!
  #2 (permalink)  
Antiguo 22/07/2011, 19:02
 
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...
  #3 (permalink)  
Antiguo 23/07/2011, 16:39
 
Fecha de Ingreso: julio-2010
Mensajes: 75
Antigüedad: 13 años, 8 meses
Puntos: 2
Respuesta: Cómo hacer un respaldo a Base de Datos Mysql mediante php en un formlulari

Muchas gracias por tu respuesta.Ya lo probé y funciona. Ahora bien , si lo que quiero es Importar mi Base de datos Mysql desde un formulario cómo sería esto? He leído algo sobre mysqlimport que trae la carpeta bin en mi caso al instalar el paquete WAMP.
  #4 (permalink)  
Antiguo 07/12/2011, 10:45
 
Fecha de Ingreso: diciembre-2011
Mensajes: 4
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Cómo hacer un respaldo a Base de Datos Mysql mediante php en un formlulari

Hola a todos

Como redirecciono para guardar el archivo en un directorio especifico


gracias
  #5 (permalink)  
Antiguo 27/04/2012, 14:44
Avatar de Andrexs  
Fecha de Ingreso: noviembre-2011
Mensajes: 25
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Cómo hacer un respaldo a Base de Datos Mysql mediante php en un formlulari

Genera el los datos de la BD perfectamente pero a la hora de importar da problemas demora demasiado y cancela el respaldo.

El problema esta en que al hacer respaldo desde phpmyadmin queda asi:
Cita:
CREATE TABLE `talmacendist` (
`idalmacendist` int(255) NOT NULL auto_increment,
`codalmacen` char(4) collate utf8_spanish_ci NOT NULL,
`idcentro` int(11) NOT NULL,
`nombdistribuidor` varchar(50) character set utf8 collate utf8_spanish_ci NOT NULL,
`personacontacto` varchar(50) character set utf8 collate utf8_spanish_ci NOT NULL,
`correo` varchar(60) character set utf8 collate utf8_spanish_ci NOT NULL,
`telefono` varchar(13) character set utf8 collate utf8_spanish_ci NOT NULL,
`celular` varchar(13) character set utf8 collate utf8_spanish_ci NOT NULL,
`fax` varchar(13) character set utf8 collate utf8_spanish_ci default NULL,
`direccion` varchar(100) character set utf8 collate utf8_spanish_ci NOT NULL,
`estatusdist` char(1) character set utf8 collate utf8_spanish_ci NOT NULL,
PRIMARY KEY (`idalmacendist`),
KEY `idcentro` (`idcentro`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=9 ;
Y con el codigo ese Queda asi:

Cita:
CREATE TABLE `talmacendist` (
`idalmacendist` int(255) NOT NULL auto_increment,
`codalmacen` char(4) collate utf8_spanish_ci NOT NULL,
`idcentro` int(11) NOT NULL,
`nombdistribuidor` varchar(50) collate utf8_spanish_ci NOT NULL,
`personacontacto` varchar(50) collate utf8_spanish_ci NOT NULL,
`correo` varchar(60) collate utf8_spanish_ci NOT NULL,
`telefono` varchar(13) collate utf8_spanish_ci NOT NULL,
`celular` varchar(13) collate utf8_spanish_ci NOT NULL,
`fax` varchar(13) collate utf8_spanish_ci default NULL,
`direccion` varchar(100) collate utf8_spanish_ci NOT NULL,
`estatusdist` char(1) collate utf8_spanish_ci NOT NULL,
PRIMARY KEY (`idalmacendist`),
KEY `idcentro` (`idcentro`),
CONSTRAINT `talmacendist_ibfk_1` FOREIGN KEY (`idcentro`) REFERENCES `tcentro` (`idcentro`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
Hay una gran diferencia y se nota que al crear las relaciones pues busca las otras tablas, habria que indicarle en que orden van las tablas para que no de problemas al importar el sql generado por ese codigo.

Alguno conoce la manera de que no cree el CONSTRAINT?

Última edición por Andrexs; 27/04/2012 a las 15:17
  #6 (permalink)  
Antiguo 27/04/2012, 15:38
Avatar de Andrexs  
Fecha de Ingreso: noviembre-2011
Mensajes: 25
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Cómo hacer un respaldo a Base de Datos Mysql mediante php en un formlulari

Para el que presente el mismo problema aca la solucion:

Si tienen tablas con relacion y no estan en orden dara problemas al recuperar datos.
asi que al sql q generen agreguen


SET FOREIGN_KEY_CHECKS=0; Al inicio de la creacion de tablas

SET FOREIGN_KEY_CHECKS=1; al Final cuando terminan de crear las tablas

o bien agreguenlo en el codigo que genera el sql.
  #7 (permalink)  
Antiguo 13/09/2016, 11:40
 
Fecha de Ingreso: julio-2011
Ubicación: Santa Amalia
Mensajes: 22
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Cómo hacer un respaldo a Base de Datos Mysql mediante php en un formlulari

Hola, según he probado funciona perfectamente. Pero tengo una consulta.

Si en vez de descargar el archivo, quisiera que automaticamente se hiciera una copia de la base de datos dentro del servidor como lo podría hacer?

Es decir, me gustaría tener una carpeta dentro del servidor web donde se almacenara un historia de los backup.

Etiquetas: mediante, mysql, respaldo, formulario
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:14.