Foros del Web » Programando para Internet » PHP »

Como exportar de una base de datos a otra? (más de 200000 datos)

Estas en el tema de Como exportar de una base de datos a otra? (más de 200000 datos) en el foro de PHP en Foros del Web. Buenas.. Haber si me solucionais el tema, tengo una base de datos en la que me interesa exportar todos los emails de unos clientes de ...
  #1 (permalink)  
Antiguo 16/07/2004, 04:54
 
Fecha de Ingreso: mayo-2004
Mensajes: 398
Antigüedad: 19 años, 10 meses
Puntos: 4
Pregunta Como exportar de una base de datos a otra? (más de 200000 datos)

Buenas..

Haber si me solucionais el tema, tengo una base de datos en la que me interesa exportar todos los emails de unos clientes de una web a otra.

Dentro de phpadmin le doy a exportar pero me da fallo por que hay demasiados datos.

Entonces yo había pensado que con este simple script que he hecho funcionaría pero no es así, no estoy seguro de que se puedan abrir dos bases de datos simultanemente como lo he hecho.

Código PHP:


<?php

//Conexion Server MySql
$bd_1=@mysql_connect("direccion""usuario""contraseña");

//Conexion BBDD
$sel_1=@mysql_select_db("base_de_datos");


//----------------------------------------------------------------------------------------------

$busqueda_1= @mysql_query("SELECT email FROM tabla1 ORDER by email");
while(
$row_1 mysql_fetch_array($busqueda_1))
 { 
        
$email_1=$row_1["email"];

        
//-----------------------------------------------------------------------------------------------
        //Conexion Server MySql
        
$bd_2n=@mysql_connect("direccion2""usuario2""contraseña2");

        
//Conexion BBDD
        
$sel_2=@mysql_select_db("base_de_datos2");
  
          
//--------------Comprobamos  que el em@il no se ha introducido antes
          
$busqueda_2= @mysql_query("SELECT email FROM suscriptor ORDER by email");
          
$insertadoya=0;  //Vamos a usar esta variable para conocer si un em@il está introducido ya en la bd
 
          
while($row_2 mysql_fetch_array($busqueda))
          {
                if (
$row_2["email"] == $email_1)
              {
                  
$insertadoya=1;
            }
          }

          if (
$insertadoya==0)
          {
              
$sql "INSERT INTO tabla SET email='$email_1'  ";

         }
 } 
?>
  #2 (permalink)  
Antiguo 16/07/2004, 07:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Si tienes que trabajar con dos BD de datos (conexiones) diferentes .. Tienes que hacer la conexión a tu BD 1 y a la BD 2 (mysql_connect()) y seleccionar la BD a trabajar (mysql_select_db()) ..pero usando el link que has creado en cada uno de los anteriores $link1=mysql_connect() ... $link2=mysql_connect(), aunque sean a la misma BD. El objetivo de todo esto es separar ambas consultas y usar ese $link1 o $link2 como parámetro para mysql_select_db() y para los demás mysql_xxx() que uses como el mysql_query() para que "sepa" PHP y Mysql de que "BD" estás hablando.

Fijate en la documentación de PHP sobre mysql y veras que todas las funciones de mysql tienen el parámetro opcional de "link" de conexión (es opcional si usas una sóla conexión por scritp .. pero has de indicarlo si usas várias).

www.php.net/mysql

Un saludo,
  #3 (permalink)  
Antiguo 16/07/2004, 07:37
Avatar de fermar21  
Fecha de Ingreso: marzo-2004
Ubicación: San Nicolas - Bs. As.
Mensajes: 294
Antigüedad: 20 años
Puntos: 0
Me ganaste de mano Cluster. Ya le estaba por responder lo mismo, jeje.

Saludos
__________________
Fernando Marinzulich
Programador Web (PHP/MySQL/Jquery)
  #4 (permalink)  
Antiguo 19/07/2004, 01:23
 
Fecha de Ingreso: mayo-2004
Mensajes: 398
Antigüedad: 19 años, 10 meses
Puntos: 4
De acuerdo no lo entiendo...

gracias por contestar

pero no lo entiendo no me podrías decir según el código metido por mí??
  #5 (permalink)  
Antiguo 19/07/2004, 03:10
 
Fecha de Ingreso: julio-2004
Ubicación: Puerto Vallarta, Jalisco, Mexico
Mensajes: 186
Antigüedad: 19 años, 8 meses
Puntos: 0
tal vez no es un codigo, pero yo te puedo recomendar un programa, se llama Navicat, con este puedes exportar e importar lo que quieras desee tu PC local, lo unico que tienes que hacer es darte los privilegios para hacerlo desde tu PC yo lo he hecho y me resulta mas sencillo que hacerlo desde el PhpMyAdmin por lo mismo que dices que da un error por ser muchos datos, igual podrias intentar el NaviCat.


Suerte
__________________
Shanti Castillo G.
  #6 (permalink)  
Antiguo 19/07/2004, 04:21
 
Fecha de Ingreso: mayo-2004
Mensajes: 398
Antigüedad: 19 años, 10 meses
Puntos: 4
De acuerdo Gracias, pero no me vale

Pero el problema es que tengo la lista de emails en la base de datos de internet
  #7 (permalink)  
Antiguo 19/07/2004, 08:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
asitudela ..

Lee la documentación oficial de las funciones que usas y lee su sintax .. todas tienen lo que ya comenté .. el parámetro oficial donde debes indicar el LINK de conexión (ese que haces en tu mysql_query() ) y que debes usar para cada BD diferente el que creastes para cada una en el resto de funciones mysql_xxxx() que usas.

Un saludo,
  #8 (permalink)  
Antiguo 19/07/2004, 10:47
 
Fecha de Ingreso: mayo-2004
Mensajes: 398
Antigüedad: 19 años, 10 meses
Puntos: 4
Exclamación estoy jodido

me leído los manuales sobre las funciones pero intentándolo aplicar un poco tampoco lo he logrado, por favor ayudarme un poco más, que tenía que haber pasado estos datos para esta mañana.



He hecho algunos cambios.. (no sé si para bien o para mal)

Código PHP:

<?php

//Conexion 1         ---------------  Aquí están los emails
$conex_db1=@mysql_connect("xxxxxx""xxxx""xxxxxxx");
$bd1=@mysql_select_db("xxxx");

//Conexion 2
$conex_db2=@mysql_connect("xxxxxx""xxxxxx""xxxxxx");
$bd2=@mysql_select_db("xxxxxx");

//--------------------------------------------------------------------------
mysql_select_db('db1'$conex_db1); 

$query_1 = ("SELECT email FROM bajas ORDER by email");
$busqueda_1= @mysql_query($query_1$conex_db1);
while(
$row_1 mysql_fetch_array($busqueda_1))
{
    
$email_1=$row_1["email"];

    
mysql_select_db('conex_db2'$db2);    //selecciono la 2ª bd (destino emails)

    //--------------Comprobamos  que el em@il no se ha introducido antes en recoin

    
$query_2 = ("SELECT email FROM suscriptor ORDER by email");
    
$busqueda_2= @mysql_query($query_2$conex_db2);
        
    
$insertadoya=0;  //Vamos a usar esta variable para conocer si un em@il está introducido ya en la bd

    
while($row_2 mysql_fetch_array($busqueda_2))
    {
          if (
$row_2["email"] == $email_1)
        { 
$insertadoya=1; }
    }

    if (
$insertadoya==0)
    {      
$sql "INSERT INTO suscriptor SET email='$email_1'  "; }

    
mysql_select_db('conex_db1'$conex_db1);
}
  #9 (permalink)  
Antiguo 19/07/2004, 13:01
 
Fecha de Ingreso: julio-2004
Ubicación: Puerto Vallarta, Jalisco, Mexico
Mensajes: 186
Antigüedad: 19 años, 8 meses
Puntos: 0
Cita:
Iniciado por asitudela
Pero el problema es que tengo la lista de emails en la base de datos de internet
con el NaviCat puedes pasarla de una base de datos
otra sin problemas y aunque esten en intnernet.
__________________
Shanti Castillo G.
  #10 (permalink)  
Antiguo 21/07/2004, 15:55
 
Fecha de Ingreso: mayo-2004
Mensajes: 398
Antigüedad: 19 años, 10 meses
Puntos: 4
Exclamación Sigo jodido... casualmente el navicat me da error

Sigo jodido... casualmente el navicat me da error

nadie puede ayudarme?????
  #11 (permalink)  
Antiguo 21/07/2004, 17:26
Avatar de sir_notos  
Fecha de Ingreso: noviembre-2001
Ubicación: Mexicali
Mensajes: 709
Antigüedad: 22 años, 4 meses
Puntos: 1
Si tienes acceso reomoto a esos servers puedes usar SQLyog alomejor te sirve :)
__________________
Usuario Registrado de linux #374849
  #12 (permalink)  
Antiguo 21/07/2004, 19:37
 
Fecha de Ingreso: abril-2002
Mensajes: 60
Antigüedad: 21 años, 11 meses
Puntos: 0
Intenta Por Partes

Bueno, yo no trabajo con MySQL pero lo que hago para migrar cuando la data es grande es hacerlo por partes:

Seleccionas primero los datos de la primera base, pero con condición de que el id sea >=numero inicial y <=numero final, luego se copia la consulta a la segunda base. Luego se repite la operación.en unas 20 veces habrias terminado todo. Incluso, creas un algoritmo que haga las veces necesarias automáticamente y te vaya informando el progreso, de modo que si se queda colgado o algo así sabrás exactamente en qué parte.

Lo que te digo es realmente sencillo y básico pero te aseguro que te quita muchos dolores de cabeza y largas horas de espera. Yo lo hago y me da buenos resultados, en esto no hay que complicarse tanto.
__________________
http://www.autosyautos.com
  #13 (permalink)  
Antiguo 21/07/2004, 20:12
Avatar de sir_notos  
Fecha de Ingreso: noviembre-2001
Ubicación: Mexicali
Mensajes: 709
Antigüedad: 22 años, 4 meses
Puntos: 1
Claro puedes usar la sentencia limit

Código PHP:
<?
$inicio 
// si es de 1000 en 1000 seri 0 luego 1000 luego 2000 .... etc
$num // seria 1000 siempre :)
$sql "select * from table where order by id limit $inicio,$num"
?>
__________________
Usuario Registrado de linux #374849

Última edición por sir_notos; 21/07/2004 a las 20:14
  #14 (permalink)  
Antiguo 22/07/2004, 05:27
 
Fecha de Ingreso: mayo-2004
Mensajes: 398
Antigüedad: 19 años, 10 meses
Puntos: 4
ya está solucionado!!!!!!!

Gracias a todos.

Al final he hecho lo que dijeron SHANTIC y a SIR NOTOS.

Antes me daba fallo al conectarme a la base de datos de una de las webs porque no tenía previlegios para eso. Después de llamar al hosting me dieron permisos y en cuestión de 20 min ya lo tenía hecho...


Lo de pasar datos de poco en poco, me cansó cuando sólo llevaba 10000 ya que aunque podía extraer de la base datos hasta 10000 emails de golpe, al insertarlos con phpadmin sólo me permitía de 2000 en 2000. Así que no me gustaba la idea de hacer lo mismo 100 veces... con la pérdida de tiempo que supone



MUCHAS GRACIAS POR AYUDARME!!!!! SOIS LOS MEJORES!!!!!
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 00:17.