Foros del Web » Programando para Internet » PHP »

Clonar tablas mysql y código que no funciona

Estas en el tema de Clonar tablas mysql y código que no funciona en el foro de PHP en Foros del Web. Buenas, necesito clonar mediante php dos tablas en mysql, se me ocurrió que podría hacerlo así: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original $source_db = "bd1" ...
  #1 (permalink)  
Antiguo 24/04/2012, 05:45
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Clonar tablas mysql y código que no funciona

Buenas, necesito clonar mediante php dos tablas en mysql, se me ocurrió que podría hacerlo así:

Código PHP:
Ver original
  1. $source_db = "bd1"; // Origen
  2.     $new_db = "db2"; // Destino
  3.    
  4.     $c = mysql_connect("localhost", "user", "***********");
  5.  
  6.     mysql_query("create database $new_db", $c);
  7.  
  8.     // Vieja
  9.     mysql_select_db($source_db, $c);
  10.  
  11.     $result = mysql_query("show tables", $c);
  12.  
  13.     $table_names = array();
  14.  
  15.     while ($row = mysql_fetch_array($result)) {
  16.  
  17.         $table_names[] = $row[0];
  18.  
  19.     }
  20.  
  21.     // Nueva
  22.     mysql_select_db($new_db, $c);
  23.    
  24.     $well = 0; // Las que salieron bien
  25.     $err = 0; // Las que salieron mal
  26.    
  27.     for ($i = 0; $i < count($table_names); $i++) {
  28.  
  29.         if(mysql_query("create table ".$table_names[$i]." select * from $source_db.".$table_names[$i], $c)) $well++;
  30.          else $err++;
  31.  
  32.     }

Esto crea la nueva db, clona las tablas pero falla al copiar estructura y datos. Solo crea la nueva db y las tablas (sin la estructura completa).

¿Cómo podría clonar 2 ddbbs en mysql desde php?

Saludos!
__________________
:)
  #2 (permalink)  
Antiguo 24/04/2012, 06:32
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Clonar tablas mysql y código que no funciona

En la documentación de php ellos tienen algunos ejemplo de como podrias crear un esquema de las tabla.

la función mysql_fetch_field te puede ayudar ella obtiene la información de una columna.

En esa sección tienen muchos ejemplos, puedes usar esa guía y construir algo para ti.

Saludos.
  #3 (permalink)  
Antiguo 24/04/2012, 06:36
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Clonar tablas mysql y código que no funciona

Tambien he visto estas lineas que clonan la tablas mucho mas facil

Código SQL:
Ver original
  1. CREATE TABLE  newtable LIKE db.old_table;
  2. SELECT * FROM old_table;

Saludos.
  #4 (permalink)  
Antiguo 24/04/2012, 06:46
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: Clonar tablas mysql y código que no funciona

Cita:
Iniciado por gjx2 Ver Mensaje
Tambien he visto estas lineas que clonan la tablas mucho mas facil

Código SQL:
Ver original
  1. CREATE TABLE  newtable LIKE db.old_table;
  2. SELECT * FROM old_table;

Saludos.
Es raro, por que lo que hago en la linea 29 del código que puse debería funcionar
Cita:
create table db_new.table as (select * from db_source.table)
La función mysql_fetch_field() no me sirve para lo que busco, sería para hacer lo mismo que ese sql pero más rebuscado
__________________
:)
  #5 (permalink)  
Antiguo 24/04/2012, 06:55
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Clonar tablas mysql y código que no funciona

utilizar or die(mysql_error() ) para ver que error te esta encontrando la función mysql_query()
A mi me funciona bien tu código.
  #6 (permalink)  
Antiguo 24/04/2012, 07:10
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Clonar tablas mysql y código que no funciona

Otra cosa, aun que el procedimiento que estas utilizando para clonar la tabla sea parecida a la que te sugerí en el fondo no hacen lo mismo, la tuya obvia datos como son las primary key , las foraneas etc.
la mia copia todo tal cual.
modifique un poco tu codigo.

solo esta parte.
Código PHP:
Ver original
  1. if(mysql_query("CREATE TABLE  ".$table_names[$i]." LIKE $source_db.".$table_names[$i], $c)){
  2.                 mysql_query("INSERT INTO  ".$table_names[$i]."(SELECT * FROM $source_db.".$table_names[$i].")", $c); $well++;  
  3.            
  4.            
  5.         } else { $err++; }


Saludos.
  #7 (permalink)  
Antiguo 24/04/2012, 07:39
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: Clonar tablas mysql y código que no funciona

@gjx2 muchas gracias :D

Al parecer lo que dijiste copia la tabla tal cual y lo que yo usaba, solo la estructura (o al menos eso me parece)

Saludos, +K
__________________
:)
  #8 (permalink)  
Antiguo 24/04/2012, 07:42
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: Clonar tablas mysql y código que no funciona

Aunque no funcionó tal cual lo dijiste, así no copia tablas. Dentro del code que dejé hay que poner [...] TABLE $new_db.".$table_names[$i]." LIKE $source_db. [...]

Ese simple detalle y ya funciona.

Aquí el code por si alguno llega desde google o algo:

Código PHP:
Ver original
  1. $source_db = "bd1"; // Origen
  2. * * $new_db = "db2"; // Destino
  3. * *
  4. * * $c = mysql_connect("localhost", "user", "***********");
  5. *
  6. * * mysql_query("create database $new_db", $c);
  7. *
  8. * * // Vieja
  9. * * mysql_select_db($source_db, $c);
  10. *
  11. * * $result = mysql_query("show tables", $c);
  12. *
  13. * * $table_names = array();
  14. *
  15. * * while ($row = mysql_fetch_array($result)) {
  16. *
  17. * * * * $table_names[] = $row[0];
  18. *
  19. * * }
  20. *
  21. * * // Nueva
  22. * * mysql_select_db($new_db, $c);
  23. * *
  24. * * $well = 0; // Las que salieron bien
  25. * * $err = 0; // Las que salieron mal
  26. * *
  27. * * for ($i = 0; $i < count($table_names); $i++) {
  28. *
  29. * * * * if(mysql_query("CREATE TABLE  $new_db.".$table_names[$i]." LIKE $source_db.".$table_names[$i], $c)) $well++;
  30. * * * * *else $err++;
  31. *
  32. * * }

Verifico que el código funciona correcto, está probado.
__________________
:)
  #9 (permalink)  
Antiguo 24/04/2012, 07:45
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Clonar tablas mysql y código que no funciona

Ok veo que tambien le quitaste una parte al if ahora solo creas la estructura pero no pasas el contenido,
de todas formas están las dos opciones para el que desee.

Saludos.
  #10 (permalink)  
Antiguo 24/04/2012, 09:00
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: Clonar tablas mysql y código que no funciona

Cierto, acabo de probar y es verdad que no pasa datos.
Las tablas con las que estaba trabajando solo tienen estructura, por lo que no lo noté.

Ahora veo como hacer para pasar también los datos y pongo el código completo :)
__________________
:)
  #11 (permalink)  
Antiguo 26/04/2012, 06:31
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: Clonar tablas mysql y código que no funciona

Aún no conseguí que se repliquen las ddbb enteras :(

Estuve googleando sobre sincronizar ddbbs y no encontré nada útil

¿Alguien sabe como puedo hacerlo? El fin es que de db_source se cree db_new y db_new sea identica a db_source.
__________________
:)
  #12 (permalink)  
Antiguo 26/04/2012, 06:47
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Clonar tablas mysql y código que no funciona

Hola Luisgzafra, Pero la data se replica con estas lineas que te puse antes.

Código PHP:
Ver original
  1. if(mysql_query("CREATE TABLE  ".$table_names[$i]." LIKE $source_db.".$table_names[$i], $c)){
  2.                 mysql_query("INSERT INTO  ".$table_names[$i]."(SELECT * FROM $source_db.".$table_names[$i].")", $c); $well++;  
  3.            
  4.            
  5.         } else { $err++; }


De ese modo si te fijas clona la tabla y ademas hace una copia de la información.
fíjate en la linea 2.

Lo único es que tienes que modificar los nombre de las db y la tabla ya que creo que no lo puse como lo tenias.

Saludos.
  #13 (permalink)  
Antiguo 27/04/2012, 01:12
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Respuesta: Clonar tablas mysql y código que no funciona

Hola gjx2, probé con tu código y sigue pasando lo mismo.

En phpmyadmin, listo las tablas en la db base y:
78 tabla(s) Número de filas 193 MyISAM latin1_swedish_ci 3.0 MB 0 Bytes
Y en la nueva:
78 tabla(s) Número de filas 181 MyISAM latin1_swedish_ci 916.9 KB 0 Bytes
Teniendo en cuenta: (Tabla Acción Registros 1 Tipo Cotejamiento Tamaño Residuo a depurar)

Al sincronizar las dos db en phpmyadmin si me lo hizo todo bien.

Quizás deba probar usando mysql_real_escape_string u alguna otra función, el único error que creo que puede ser, es la codificación de los caracteres o algo de los datos.

Al sincronizar en phpmyadmin, hay tablas que tiene que sincronizar también la estructura.
__________________
:)

Etiquetas: clonar, mysql, sql, tabla, tablas
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 02:56.