2010-10-14 29 views
20

Necesito copiar una tabla de una base de datos a otra. Esto será un cronjob. ¿Cuál es la mejor manera de hacerlo? Script PHP o script de Shell El problema con PHP, ambas bases de datos tiene diferentes nombres de usuario y contraseñas, así que no puedo hacerlo así.Cómo copiar una tabla de una base de datos mysql a otra base de datos mysql

CREATE TABLE db1.table1 SELECT * FROM db2.table1 

¿Debo conectar la primera base de datos para obtener todos los registros e insertar toda la nueva base de datos utilizando el bucle WHILE o hay una forma mejor?

Prefiero un script de shell para hacer esto en lugar de script PHP.

Gracias

Respuesta

27

I'd dump it. Mucho menos complicado que cualquier cosa basada en PHP. referencia

mysqldump -u user1 -ppassword1 databasename > dump.sql 
mysql -u user2 -ppassword2 databasename < dump.sql 

MySQL: 4.5.4. mysqldump — A Database Backup Program

+5

Ya que quiero transferir sólo una mesa, supongo que con un poco mod esto funcionará mysqldump -u usuario1 -ppassword1 --add soltar mesa nombrebasedatos nombre de tabla> dump.sql gracias – Ergec

+0

Si utiliza phpMyAdmin, entonces será mejor. – gautamlakum

+7

Incluso puede canalizarlo: 'mysqldump --user = root --password = remote_password the_database_name | mysql --user = root --password = local_password the_database_name'; generalmente esto se puede hacer de servidor a servidor usando SSH-port-forwarding: 'ssh -f -N -L 3307: localhost: 3306 nmmn' (nmmn es uno de mis accesos directos SSH, use un puerto de nombre-servidor +) ; @Ergec para tablas múltiples usa el param '--tables table1 table2' – feeela

5

Phpmyadmin tiene funcionalidad incorporada para copiar tablas de una base de datos a otro. De lo contrario, puede ir con Pekka o exportar tabla y luego importar tabla.

+0

IIRC, la funcionalidad incorporada funcionará solo si el mismo usuario tiene acceso a ambas bases de datos. –

26
mysqldump -u user1 -ppassword1 databasename TblName | mysql -u user2 -ppassword2 anotherDatabase 

Todo se puede hacer en un solo comando.

0
insert into dest.table select * from orginal.table; 
32

Si necesita copiar la tabla en el mismo servidor puede utilizar este código:

USE db2; 

CREATE TABLE table2 LIKE db1.table1; 

INSERT INTO table2 
    SELECT * FROM db1.table1; 

Se copia + pega desde aquí: codingforums.com

No es mi solución, pero Lo encuentro útil.

+0

Esta debería ser la respuesta aceptada. Mucho más fácil que mysqldump línea de comandos. –

0

uso <from database>

create table <to database.new name> as (select * from <table to copy>); 
+1

Bienvenido a stackoverflow. Creo que tu respuesta se equivocó. Intente reformatearlo marcándolo como código. –

+1

Tal como está, esta respuesta tiene poco sentido. Por favor, agregue un poco de explicación, y corrija el fragmento que ha publicado –

3

Voy a poner esta respuesta para cualquier otra persona en busca de ayuda.

Si no tiene acceso a SSH, puede usar PhpMyAdmin.

Simplemente:

  1. de exploración para la tabla que desea mover
  2. Haga clic en la ficha operaciones
  3. Uso del mover o copiar a la función de base de datos

Si se encuentra con problemas de privilegios , puede otorgar permisos globales a un usuario o agregar el mismo usuario a ambas bases de datos.

0
CREATE TABLE db_target.cloned_table 
SELECT * 
FROM db_source.source_table; 
4
$L1 = mysql_connect('localhost', 'user1', 'pass1'); 
$DB1 = mysql_select_db('database1', $L1); 

$L2 = mysql_connect('localhost', 'user2', 'pass2'); 
$DB2 = mysql_select_db('database2', $L2); 

$re=mysql_query("SELECT * FROM table1",$L1); 
while($i=mysql_fetch_assoc($re)) 
{ 
    $u=array(); 
    foreach($i as $k=>$v) if($k!=$keyfield) $u[]="$k='$v'"; 
    mysql_query("INSERT INTO table2 (".implode(',',array_keys($i)).") VALUES ('".implode("','",$i)."') ON DUPLICATE KEY UPDATE ".implode(',',$u),$L2) or die(mysql_error()); 
} 

usuario1, pass1, database1, reffers tabla1 de tabla iniciales usuario2, PASS2, database2, reffers Table2 a tabla copiada $ KeyField es la clave primaria de la tabla

1

Un revestimiento con diferentes servidores

mysqldump -h host1 -u user1 -ppassword1 databasename TblName | mysql -h host2 -u user2 -ppassword2 anotherDatabase 
+0

¡funciona como un encanto! –

Cuestiones relacionadas