elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Problema para realizar respaldo de MySQL con PHP !!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Problema para realizar respaldo de MySQL con PHP !!  (Leído 6,672 veces)
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Problema para realizar respaldo de MySQL con PHP !!
« en: 23 Septiembre 2008, 22:35 pm »

Tengo una aplicacion web casi completada, solo me falta la parte de RESPALDOS, en esta parte tengo la idea de que el usuario con solo presionar un boton se realize un respaldo de todas las tablas y valores de la Base de Datos existente.

Estoy iniciando a codificar el script pero no logro obtener los nombres de las tablas :S, vaya, para obtener el contenido de cada tabla solamente utilizo mysql_query() y meto toda la consulta a un mysql_fetch_array(). Pero no encuentro como obtener los nombres de las tablas ?? (show tables;)...

Alguna idea ??...

Código
  1. <?php
  2. if( !strcmp($_GET["set"], "generar_respaldo") ) //genera un nuevo respaldo
  3. {
  4. $file= fopen( "backups/respaldo_". date( "dmy", time() ). ".mysql", "w" );
  5. $link= conectar();
  6.  
  7. fputs( $file, "#################################################\n" );
  8. fputs( $file, "#########\tTABLAS DEL SISTEMA\t#########\n" );
  9. fputs( $file, "#################################################\n" );
  10.  
  11. //escribiendo tablas :: No tengo idea como obtener los NOMBRES de las TABLAS :(
  12. //while( $buf= mysql_fetch_array( mysql_query( "show tables;", $link ) ) )
  13. // fputs( $file, "create table ". $buf. "\n" );
  14. //unset($buf);
  15.  
  16. fputs( $file, "\n#########################################################\n" );
  17. fputs( $file, "#########\tINFORMACION DE LAS TABLAS\t#########\n" );
  18. fputs( $file, "#########################################################\n" );
  19.  
  20. //mysql_close($link);
  21. fclose($file);
  22.  
  23. echo "Respaldo Generado con exito.";
  24. }
  25. ?>

bye bye


« Última modificación: 23 Septiembre 2008, 22:37 pm por Diabliyo » En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Problema para realizar respaldo de MySQL con PHP !!
« Respuesta #1 en: 23 Septiembre 2008, 23:14 pm »

Listo, solucione como visualizar las tablas, ahora estoy buscando como obtener no solo los valores de los campos de las tablas, sino el tipo de campo para escribirlo en el archivo que genera mi aplicacion PHP.

Aqui el pedazo de script que llevo:

Código
  1. <?php
  2. //escribiendo TABLAS
  3. $cons= mysql_query( "show tables;", $link );
  4. while( $buf=mysql_fetch_row($cons) )
  5. {
  6. fputs( $file, "create table ". $buf[0]. "(" );
  7. $cons2= mysql_query( "describe ". $buf[0]. ";", $link );
  8. $i=0;
  9. $primary_key=0;
  10. while( $buf2=mysql_fetch_row($cons2) )
  11. {
  12. if( $i>0 )
  13. fputs( $file, ", " );
  14. else
  15. $primary_key= $buf2[0];
  16. fputs( $file, $buf2[0] );
  17. $i++;
  18. }
  19. fputs( $file, ", PRIMARY KEY(". $primary_key. ")" );
  20. fputs( $file, ");\n" );
  21. unset($buf2);
  22. unset($cons2);
  23. }
  24. unset($buf);
  25. unset($cons);
  26. ?>


En línea

:ohk<any>


Desconectado Desconectado

Mensajes: 1.744


Yo lo que quiero que me salga bien es la vida.


Ver Perfil WWW
Re: Problema para realizar respaldo de MySQL con PHP !!
« Respuesta #2 en: 24 Septiembre 2008, 00:46 am »

Seria bueno destripar el Phpmyadmin, para ver las consultas y el codigo empleado para generar los respaldos.

Me has picado con la idea, voy a buscar al respecto.
Un saludo
En línea

Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Problema para realizar respaldo de MySQL con PHP !!
« Respuesta #3 en: 24 Septiembre 2008, 01:47 am »

Gracias por tu interes ohk, pero si gustas puedes aportarle algo a mi script, hasta el momento ya puedo generar el respaldo casi por completo, ya pudo escribir los crate table y solo me falta escribir la parte de los values() en lo que es inser into.

Por favor ayudenme con la variabe $big_buffer, es la clave para terminar el script, aun estoy en eso :D !!

Aqui dejo el avance del script hasta ahorita:

Código
  1. <?php
  2. if( !strcmp($_GET["set"], "generar_respaldo") ) //genera un nuevo respaldo
  3. {
  4. $file= fopen( "backups/respaldo_". date( "dmy", time() ). ".mysql", "w" ); //creamos archivo script backup
  5. $link= conectar(); //conectamos a la BDD
  6.  
  7. fputs( $file, "#################################################\n" );  //escribimos
  8. fputs( $file, "#########\tTABLAS DEL SISTEMA\t#########\n" );  //escribimos
  9. fputs( $file, "#################################################\n" );  //escribimos
  10.  
  11. //escribiendo TABLAS
  12. $cons= mysql_query( "show tables;", $link ); //observamos las nombre de las tablas
  13. while( $buf=mysql_fetch_row($cons) ) //las introducimos con 'mysql_fetch_row'
  14. {
  15. fputs( $file, "create table ". $buf[0]. "(" ); //escribimos
  16. $cons2= mysql_query( "describe ". $buf[0]. ";", $link ); //observamos la descripcion de las tablas
  17. $i=0; //inicializacion
  18. $primary_key=0; //inicializacion para detectar el PRIMARY KEY
  19. while( $buf2=mysql_fetch_array($cons2) ) //metemos al arreglo 'mysql_fetch_array'
  20. {
  21. if( $i>0 ) //si el inicializados es mayor a 0
  22. fputs( $file, ", " ); //escribimos
  23. else //estamos en el primer valor, por lo tanto es el PRIMARY KEY
  24. $primary_key= $buf2["Field"]; //copiamos PRIMARY KEY
  25. fputs( $file, $buf2["Field"] ); //escribimos
  26.  
  27. //estereotipos de campos en bases de datos MySQL
  28. fputs( $file, " ". $buf2["Type"] ); //Type, Tipo (varchar, text, int, bigint, etc...)
  29. fputs( $file, " not NULL" ); //not NULL, todo llevara not null :D
  30. $i++; //incrementamos
  31. }
  32. fputs( $file, ", PRIMARY KEY(". $primary_key. ")" ); //escribimos PRIMARY KEY
  33. fputs( $file, ");\n" ); //escribimos cierre del 'create table'
  34. unset($buf2);
  35. unset($cons2);
  36. }
  37. unset($buf);
  38. unset($cons);
  39.  
  40. fputs( $file, "\n#########################################################\n" ); //escribimos
  41. fputs( $file, "#########\tINFORMACION DE LAS TABLAS\t#########\n" );  //escribimos
  42. fputs( $file, "#########################################################" );  //escribimos
  43.  
  44. /*
  45. El metodo de insercion debe ser asi:
  46. insert into TABLA(ID, VALOR1, VALOR2 ) values( 'valor', 'valor', 'valor' );
  47. */
  48.  
  49. $cons= mysql_query( "show tables;", $link );  //observamos las tablas
  50. while( $buf=mysql_fetch_row($cons) )  //metemos los valores con 'mysql_fetch_row'
  51. {
  52. //creamos el buffer de contenido de VALUES, para insertarlo al final
  53. /*$i=0;
  54. while( $tr_buf= mysql_query( "select * from ". $buf[0]. ";", $link ) )
  55. {
  56. $big_buffer[$i]="";
  57. $cons2= mysql_query( "describe ". $buf[0]. ";", $link );
  58. while( $buf2=mysql_fetch_array($cons2) )
  59. {
  60. if( $i>0 )
  61. $big_buffer[$i] .= ",";
  62. $big_buffer[$i] .= "'". $tr_buf[$buf2["Field"]]. "'";
  63. }
  64. $i++;
  65. }
  66. unset($cons2);
  67. unset($buf2);
  68. unset($i);
  69. unset($tr_buf);*/
  70.  
  71. //iniciamos ciclo segun el numero de miembros insertados existente en dicha tabla
  72. for( $j=0; $j<mysql_num_rows( mysql_query( "select * from ". $buf[0]. ";", $link )); $j++) //ciclo
  73. {
  74. fputs( $file, "\ninsert into ". $buf[0]. "(" ); //escribimos principio del INSERT
  75. $cons2= mysql_query( "describe ". $buf[0]. ";", $link );  //obtenemos descripcion de la tabla
  76. $i=0;
  77. while( $buf2=mysql_fetch_array($cons2) )
  78. {
  79. if( $i>0 )
  80. fputs( $file, ", " );
  81. fputs( $file, $buf2["Field"] );
  82. $i++;
  83. }
  84. fputs( $file, ")" ); //finalizamos INSERT
  85.  
  86. fputs( $file, "values(" ); //abrimos el VALUES
  87. //fputs( $file, $big_buffer[$i] ); //escribimos resultados
  88. fputs( $file, ");" ); //finalizamos VALUES
  89. unset($buf2);
  90. unset($cons2);
  91. }
  92. unset($big_buffer);
  93. }
  94. unset($cons);
  95.  
  96. mysql_close($link);
  97. fclose($file);
  98.  
  99. echo "Respaldo Generado con exito.";
  100. }
  101. ?>
« Última modificación: 24 Septiembre 2008, 01:50 am por Diabliyo » En línea

Hans el Topo


Desconectado Desconectado

Mensajes: 1.754


"Estoy cansado de no hacer nada"


Ver Perfil WWW
Re: Problema para realizar respaldo de MySQL con PHP !!
« Respuesta #4 en: 24 Septiembre 2008, 10:03 am »

el mysqldump te lo hace con un comando te dejo un minituto

Realizar backup de musql desde PHP
En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Problema para realizar respaldo de MySQL con PHP !!
« Respuesta #5 en: 24 Septiembre 2008, 18:34 pm »

el mysqldump te lo hace con un comando te dejo un minituto

Realizar backup de musql desde PHP

mysqldump es funcional solo en Servidores Locales (localhost), pero si hablamos de Servidores de Hosting Gratuito o de Pago, la limitacion de utilizacion de funciones como: exec(), system(), shell(), no permiten utilizar mysqldump asi que seria ineficiente la idea :D !!... Abria que forzosamente hace un codigo personalizado y funcional para cualquier situacion :D !!..

Entre mas portables y funcionales seamos, y evitemos el uso de aplicaciones secundarias, es mas efectivo !!...

Aun continuo con el codigo, se aceptan aportaciones, ya que aun no queda listo el codigo :( !!..


En línea

Hans el Topo


Desconectado Desconectado

Mensajes: 1.754


"Estoy cansado de no hacer nada"


Ver Perfil WWW
Re: Problema para realizar respaldo de MySQL con PHP !!
« Respuesta #6 en: 24 Septiembre 2008, 21:32 pm »

bueno, en todos los hostings que he estado permiten al menos el system,

he estado buscando un código que híce hace bastante tiempo para realizar lo mismo que tu y no he sido capaz de encontrarlo, además creo que lo borré justamente la semana pasada
mi script simplemente hacía backup del contenido de las tablas, algunas cosillas que me dierón problemas :

-los datos binarios y derivados (blob) se suelen corromper a la hora de tratarlos

-otro tema a tener en cuenta es que si no realizas los inserts compuestos debes repetir la cabecera cada x kb porque sino peta

si saco un poco de tiempo te preparo el tema de datos





En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Problema para realizar respaldo de MySQL con PHP !!
« Respuesta #7 en: 25 Septiembre 2008, 01:56 am »

Gracias por tu contestacion Hans el Topo. Pero ahora ya logre realizar el respaldo por con exito, el codigo es el siguiente:

Código
  1. <?php
  2. if( !strcmp($_GET["set"], "generar_respaldo") ) //genera un nuevo respaldo
  3. {
  4. $file= fopen( "backups/respaldo_". date( "dmy", time() ). ".mysql", "w" ); //creamos archivo script backup
  5. $link= conectar(); //conectamos a la BDD
  6.  
  7. fputs( $file, "#################################################\n" );  //escribimos
  8. fputs( $file, "#########\tTABLAS DEL SISTEMA\t#########\n" );  //escribimos
  9. fputs( $file, "#################################################\n" );  //escribimos
  10.  
  11. //escribiendo TABLAS
  12. $cons= mysql_query( "show tables;", $link ); //observamos las nombre de las tablas
  13. while( $buf=mysql_fetch_row($cons) ) //las introducimos con 'mysql_fetch_row'
  14. {
  15. fputs( $file, "create table ". $buf[0]. "(" ); //escribimos
  16. $cons2= mysql_query( "describe ". $buf[0]. ";", $link ); //observamos la descripcion de las tablas
  17. $i=0; //inicializacion
  18. $primary_key=0; //inicializacion para detectar el PRIMARY KEY
  19. while( $buf2=mysql_fetch_array($cons2) ) //metemos al arreglo 'mysql_fetch_array'
  20. {
  21. if( $i>0 ) //si el inicializados es mayor a 0
  22. fputs( $file, ", " ); //escribimos
  23. else //estamos en el primer valor, por lo tanto es el PRIMARY KEY
  24. $primary_key= $buf2["Field"]; //copiamos PRIMARY KEY
  25. fputs( $file, $buf2["Field"] ); //escribimos
  26.  
  27. //estereotipos de campos en bases de datos MySQL
  28. fputs( $file, " ". $buf2["Type"] ); //Type, Tipo (varchar, text, int, bigint, etc...)
  29. fputs( $file, " not NULL" ); //not NULL, todo llevara not null :D
  30. $i++; //incrementamos
  31. }
  32. fputs( $file, ", PRIMARY KEY(". $primary_key. ")" ); //escribimos PRIMARY KEY
  33. fputs( $file, ");\n" ); //escribimos cierre del 'create table'
  34. unset($buf2);
  35. unset($cons2);
  36. }
  37. unset($buf);
  38. unset($cons);
  39.  
  40. fputs( $file, "\n#########################################################\n" ); //escribimos
  41. fputs( $file, "#########\tINFORMACION DE LAS TABLAS\t#########\n" );  //escribimos
  42. fputs( $file, "#########################################################" );  //escribimos
  43.  
  44. /*
  45. El metodo de insercion debe ser asi:
  46. insert into TABLA(ID, VALOR1, VALOR2 ) values( 'valor', 'valor', 'valor' );
  47. */
  48.  
  49. $cons= mysql_query( "show tables;", $link );  //observamos las tablas
  50. while( $buf=mysql_fetch_row($cons) )  //metemos los valores con 'mysql_fetch_row'
  51. {
  52. //creamos el buffer de contenido de VALUES, para insertarlo al final
  53. $i=0;
  54. $cons_tr= mysql_query( "select * from ". $buf[0]. ";", $link );
  55. while( $tr_buf= mysql_fetch_array($cons_tr) )
  56. {
  57. $big_buffer[$i]="";
  58. $cons2= mysql_query( "describe ". $buf[0]. ";", $link );
  59. $r=0;
  60. while( $buf2=mysql_fetch_array($cons2) )
  61. {
  62. if( $r>0 )
  63. $big_buffer[$i] .= ",";
  64. $big_buffer[$i] .= "'". $tr_buf[$buf2["Field"]]. "'";
  65. $r++;
  66. }
  67. unset($r);
  68. $i++;
  69. }
  70. unset($cons_tr);
  71. unset($cons2);
  72. unset($buf2);
  73. unset($i);
  74. unset($tr_buf);
  75.  
  76. //iniciamos ciclo segun el numero de miembros insertados existente en dicha tabla
  77. for( $j=0; $j<mysql_num_rows( mysql_query( "select * from ". $buf[0]. ";", $link )); $j++) //ciclo
  78. {
  79. fputs( $file, "\ninsert into ". $buf[0]. "(" ); //escribimos principio del INSERT
  80. $cons2= mysql_query( "describe ". $buf[0]. ";", $link );  //obtenemos descripcion de la tabla
  81. $i=0;
  82. while( $buf2=mysql_fetch_array($cons2) )
  83. {
  84. if( $i>0 )
  85. fputs( $file, ", " );
  86. fputs( $file, $buf2["Field"] );
  87. $i++;
  88. }
  89. fputs( $file, ")" ); //finalizamos INSERT
  90.  
  91. fputs( $file, " values(" ); //abrimos el VALUES
  92. fputs( $file, $big_buffer[$j] ); //escribimos resultados
  93. fputs( $file, ");" ); //finalizamos VALUES
  94. unset($buf2);
  95. unset($cons2);
  96. }
  97. unset($big_buffer);
  98. }
  99. unset($cons);
  100.  
  101. mysql_close($link);
  102. fclose($file);
  103.  
  104. echo "Respaldo Generado con exito.";
  105. }
  106. ?>
« Última modificación: 25 Septiembre 2008, 02:10 am por Diabliyo » En línea

Hans el Topo


Desconectado Desconectado

Mensajes: 1.754


"Estoy cansado de no hacer nada"


Ver Perfil WWW
Re: Problema para realizar respaldo de MySQL con PHP !!
« Respuesta #8 en: 25 Septiembre 2008, 23:04 pm »

se me ha olvidado comentarte que uno de los mayores inconvenientes del script es qye dependerá completamente del tiempo de ejecución máximo que permita el servidor, es decir, cuando tengas muchos mgs de datos si el script tarda más de 30 segundos (el tiempo por defecto) se cortará
En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Problema para realizar respaldo de MySQL con PHP !!
« Respuesta #9 en: 26 Septiembre 2008, 00:52 am »

se me ha olvidado comentarte que uno de los mayores inconvenientes del script es qye dependerá completamente del tiempo de ejecución máximo que permita el servidor, es decir, cuando tengas muchos mgs de datos si el script tarda más de 30 segundos (el tiempo por defecto) se cortará

Eso si xD, habra que limitarle el tiempo, yo aconsejaria poner algo asi:

Código
  1. <?php
  2. set_time_limit(300); //5 minutos
  3.  
  4. //... codigo para generar respaldo
  5.  
  6. set_time_limit(30); //regresando al tiempo por defecto
  7. ?>
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como Realizar un Buscador en Java y MySql?
Java
hack-4-life 7 22,082 Último mensaje 2 Agosto 2012, 19:11 pm
por leogtz
problema para realizar este programa
Programación C/C++
tuinkinho 1 2,569 Último mensaje 8 Abril 2012, 21:14 pm
por durasno
Problema semicirculo para realizar un salto en video juego.
Programación C/C++
ThePinkPanther 5 3,457 Último mensaje 14 Marzo 2013, 17:17 pm
por ThePinkPanther
[PYTHON][AYUDA] Script respaldo automático mysql
Python
LaThortilla (Effort) 1 3,750 Último mensaje 14 Marzo 2015, 19:04 pm
por LaThortilla (Effort)
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines