Foros del Web » Creando para Internet » Sistemas de gestión de contenidos »

Problemas al exportar tabla en phpMyadmin

Estas en el tema de Problemas al exportar tabla en phpMyadmin en el foro de Sistemas de gestión de contenidos en Foros del Web. Quiero exportar una tabla con 170.000 registros que tengo en local a mi servidor e importarla alli pero no consigo que me la importe entera ...
  #1 (permalink)  
Antiguo 22/10/2004, 11:44
Avatar de Lord of freaks  
Fecha de Ingreso: octubre-2004
Ubicación: Madrid
Mensajes: 334
Antigüedad: 19 años, 6 meses
Puntos: 2
Problemas al exportar tabla en phpMyadmin

Quiero exportar una tabla con 170.000 registros que tengo en local a mi servidor e importarla alli pero no consigo que me la importe entera tan solo me importa unos 3000.

¿hay solución?
  #2 (permalink)  
Antiguo 23/10/2004, 08:13
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
La solución sería "partir" la tabla. Lo que te pasa a ti es muy comun cuando las tablas son muy grandes

Lo que puedes hacer es exportar en un archivo del registro 0 al 2999, en otro del 3000 al 5999, etc... luego los subes uno a uno pero con cuidado para no cargarte nada, es decir, en el primero puedes poner la sentencia que te crea la tabla y añadir los primeros 3000 registros, pero en los demás ya sólo tienes que añadir registros pues la tabla ya estaba creada.

Suerte
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #3 (permalink)  
Antiguo 24/10/2004, 12:08
Avatar de Lord of freaks  
Fecha de Ingreso: octubre-2004
Ubicación: Madrid
Mensajes: 334
Antigüedad: 19 años, 6 meses
Puntos: 2
¿Existiría la opción de enviarselos al propietario del servidor (via email por ejemplo) y que el los insertara directamente en la máquina remota (para mi no para el claro)?.

Partimos de la base que el alojador de mi web es amiguete y estaría dispuesto a hacerlo si fuese posible.

Gracias
  #4 (permalink)  
Antiguo 24/10/2004, 14:26
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Por poder podría hacerlo, pero él se va a encontrar con el mismo problema (ya que la forma de insertarlos será la misma para ti que para él). Creo que si no troceas esa tabla no vas a poder insertarla de forma cómoda.
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #5 (permalink)  
Antiguo 25/10/2004, 13:00
Avatar de Lord of freaks  
Fecha de Ingreso: octubre-2004
Ubicación: Madrid
Mensajes: 334
Antigüedad: 19 años, 6 meses
Puntos: 2
Gracias ferny por toda la ayuda, la verdad es que no he encontrado aun una "forma comoda" de partir 170.000 registros pero ajo y agua y hala paciencia.
  #6 (permalink)  
Antiguo 26/10/2004, 08:19
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
En su día yo tuve que programarme mi propia herramienta, tenía que mudar un foro phpbb con una base de datos de más de 50 MB y algunas tablas que pesaban más de 10 MB y por comodidad acabé creandome una herramienta en PHP. Asi que si quieres hacerlo de una forma cómoda... a programar algo
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #7 (permalink)  
Antiguo 26/10/2004, 16:07
Avatar de Lord of freaks  
Fecha de Ingreso: octubre-2004
Ubicación: Madrid
Mensajes: 334
Antigüedad: 19 años, 6 meses
Puntos: 2
Creo que va a ser la mejor solución. Lo que si te pediría es si puedes darme alguna ideilla, yo en pricipio lo haría con un bucle con muchos if en función de las id y con la funcion fwrite pero si se te ocurre algo mejor posteamelo porfavor.

Gracias
  #8 (permalink)  
Antiguo 27/10/2004, 13:33
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Te puedo pasar el código fuente de uno de los archivos, en este caso el que usé para hacer la copia de seguridad de la tabla phpbb_search_wordmatch

Código PHP:
<?
include("conexion.php");

// Número de registros por archivo
$reg=400;

// Calculamos el número de archivos que hay que descargar
$total mysql_query("SELECT MAX(post_id) FROM phpbb_search_wordmatch");
$row mysql_fetch_row($total);
$totalarchivos ceil($row[0]/$reg);
mysql_free_result($total);

if (
is_numeric($_GET['n'])) {
    
$min=$reg*($_GET['n']-1);
    
$max=$reg*$_GET['n'];
    
$sql="SELECT * FROM phpbb_search_wordmatch WHERE (post_id>=".$min." AND post_id<".$max.") ORDER BY post_id ASC";
    
$res=mysql_query($sql);
    
$filas=mysql_num_rows($res);

    
$i=1;
    
ob_start(); // Inicio buffer

    // Meto la sentencia de estructura de tabla
    
echo "INSERT INTO `phpbb_search_wordmatch` (`post_id`, `word_id`, `title_match`) VALUES ";
    while (
$row=mysql_fetch_row($res)){
        echo 
"(".$row[0].", ".$row[1].", ".$row[2].")";
        if (
$i!=$filas) { echo ",\r\n"; } else { echo ";"; }
        
$i++;
    }
    
mysql_free_result($res);
    
header("Content-type: text/plain");
    
header("Content-Disposition: attachment; filename=phpbb_search_wordmatch(".$min." - ".($max-1).").txt");
    
ob_end_flush();
    exit;
}
mysql_close($conexion);
?>
<html>
<head><title>Tabla phpbb_search_wordmatch</title></head>
<body>
<h2><u><center>Tabla phpbb_search_wordmatch</center></u></h2>
<p>En total: <?=$totalarchivos?> archivos (<?=$reg?> registros por archivo)</p>
<p>
<?
for ($i=1$i<=$totalarchivos$i++) {
    echo 
"<a href='wordmatch.php?n=".$i."'>".$i."</a> - ";
}
?>
</p>
</body>
</html>
Si sabes PHP no te será dificil ver cómo funciona. Primero se conecta con la base de datos (estaría todo metido en el archivo conexion.php) y lo que hace es calcular en cuántos ficheros tienes que hacer la copia de seguridad. Lo tengo puesto en 400 registros/archivo que en el caso de esta tabla en particular es un poco excesivo pero sirve. Entonces muestra una serie de links correspondientes a los trocitos, y si pinchas en ellos se descarta un TXT que ya está listo para ser subido a la base de datos (en phpmyadmin).

Lo mismo hice con las demás tablas, es cuestión de editar unas cuantas cosas... Si no entiendes algo avisa
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #9 (permalink)  
Antiguo 29/10/2004, 16:05
Avatar de Lord of freaks  
Fecha de Ingreso: octubre-2004
Ubicación: Madrid
Mensajes: 334
Antigüedad: 19 años, 6 meses
Puntos: 2
Muchísimas gracias por el script, la verdad es que no he tenido que modificar casi nada (el nombre de la BBDD y los de los campos), además con los comentarios se entiende facilísimo.

Muchas gracias por tu colaboración te debo (al menos) una caña.
  #10 (permalink)  
Antiguo 29/10/2004, 16:18
Avatar de Lord of freaks  
Fecha de Ingreso: octubre-2004
Ubicación: Madrid
Mensajes: 334
Antigüedad: 19 años, 6 meses
Puntos: 2
Me surge un problema que una vez creado el archivo (sin problemas), al importarlo en el servidor remoto me da error en la sentencia SQL.

Creo que es debido a que al ser textos en ingles incluye palabras que son al tiempo instrucciones de SQL como AND, WHEN, ON y los paréntesis.

Hay forma humana de solucionarlo???

PD: Van 2 cañas
  #11 (permalink)  
Antiguo 29/10/2004, 16:25
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
No tiene nada que ver que las palabras sean tipo and, when, on... Haz una cosa, prueba a limitarlo a 100 registros en vez de a 400 a ver qué pasa.

Si sigue con el error copiamelo tal cual sale. Ya mañana te respondo, ahora me voy corriendooooo....

Saludos
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #12 (permalink)  
Antiguo 03/11/2004, 11:45
Avatar de Lord of freaks  
Fecha de Ingreso: octubre-2004
Ubicación: Madrid
Mensajes: 334
Antigüedad: 19 años, 6 meses
Puntos: 2
He limitado el número de registros a 100 y este es el error que me sale (el mismo que el de antes), además todo lo que sale en mayusculas me sale resaltado en otro color:

consulta SQL :

INSERT INTO `cards` ( `id` , `Name` , `Color` , `Rarity` , `Edition` , `P/T` , `Type` , `Text` , `Cost` , `Mana` )
VALUES ( 1, Ravages of War, W, R, P3, , Sorcery, 3W, Destroy
ALL lands.(

This includes your lands.
), 4 ) , ( 2, Riding Red Hare, W, C, P3, , Sorcery, 2W, Any one creature gets +3 / +3 AND gains horsemanship until the
END of the turn . , 3 ) , ( 3, Shu Cavalry, W, C, P3, 2 /2, Creature - Soldiers, 2W, Horsemanship, 3 ) , ( 4, Shu Defender, W, C, P3, 2 /2, Creature - Soldier, 2W,
WHEN Shu Defender blocks, it gets +0 / +2until the
END of the turn . , 3 ) , ( 5, Shu Elite Companions, W, U, P3, 3 /3, Creature - Soldiers, 4W, Horsemanship, 5 ) , ( 6, Shu Elite Infantry, W, C, P3, 3 /3, Creature - Soldiers, 3W, , 4 ) , ( 7, Shu Farmer, W, C, P3, 1 /1, Creature - Farmer, 1W, ON your turn, before you attack, you may tap Shu Farmer
TO gain1life . , 2 ) , ( 8, Shu Foot Soldiers, W, C, P3, 2 /3, Creature - Soldiers, 2W, , 3 ) , ( 9, Shu General, W, U, P3, 2 /2, Creature - Soldier, 3W, Horsemanship

MySQL ha dicho:


#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'of War, W, R, P3, , Sorcery, 3W, Destroy all lands. (This inclu
  #13 (permalink)  
Antiguo 03/11/2004, 11:54
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Claro, es que se te ha olvidado ponerle comillas. Es que no es tan sencillo modificar el código... Los valores en campos de tipo texto tienes que ponerlos entre comillas ' y luego "escapar" esa comilla poniendoles \\ delante si aparece una en el texo, para ello usa:


Código PHP:
str_replace("'","\\'",$tuvariable); 
Es cuestión de tener cuidado con eso. Te dejo parte del código de mi archivo para hacer la copia de la tabla phpbb_post_text, miralo y verás los cambios que hay que hacer según la variable sea tipo entero o tipo texto:


Código PHP:
echo "INSERT INTO `phpbb_posts_text` (`post_id`, `bbcode_uid`, `post_subject`, `post_text`) VALUES ";
    while (
$row=mysql_fetch_row($res)){
        
$row[2]=str_replace("'","\\'",$row[2]);
        
$row[3]=str_replace("'","\\'",$row[3]);
        
$row[3]=str_replace("\r\n","\\r\\n",$row[3]);
        echo 
"(".$row[0].", '".$row[1]."', '".$row[2]."', '".$row[3]."')";
        if (
$i!=$filas) { echo ",\r\n"; } else { echo ";"; }
        
$i++;

Básicamente lo que hago es sustituir las comillas ' que aparecen en el texto por su valor escapado \\' (así me evito errores de que me finalice la cadena de caracteres cuando no es debido). Eso para los dos campos de texto, el post_subject y el post_text

Además reemplazo los saltos de linea \r\n por su equivalente escapado \\r\\n con el único fin de que cada insert ocupa una sóla linea.

Saludos
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #14 (permalink)  
Antiguo 03/11/2004, 13:11
Avatar de Lord of freaks  
Fecha de Ingreso: octubre-2004
Ubicación: Madrid
Mensajes: 334
Antigüedad: 19 años, 6 meses
Puntos: 2
Eres una puta maquina tio (la verdad es que yo también soy un poco tonto porque si que sabia que los campos de texto hay que pasarlos entre comillas) pero es igual porque FUNCIONA.

Te debo n cañas

$n=1;
while (n<10000000){
++$n;
}

Gracias
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 23:44.