2010-10-14 8 views
20

Je dois copier une table d'une base de données à une autre. Ce sera un cronjob. Lequel est le meilleur moyen de le faire? Script PHP ou Shell Script. Le problème avec PHP, les deux bases de données ont des noms d'utilisateur et des mots de passe différents, donc je ne peux pas le faire comme ça. Dois-je simplement me connecter en premier DB obtenir tous les enregistrements et tout insérer à la nouvelle base de données en utilisant la boucle WHILE ou il y a une meilleure façon?Comment copier une table d'une base de données mysql vers une autre base de données mysql

Je préfère un script shell pour ce faire au lieu du script PHP.

Merci

Répondre

27

Je le viderais. Beaucoup moins compliqué que tout ce qui est basé sur PHP.

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

référence MySQL: 4.5.4. mysqldump — A Database Backup Program

+5

Depuis que je veux transférer une seule table, je pense avec un peu mod cela fonctionnera mysqldump -u user1 -ppassword1 -add-drop-table nom_basededonnées nom_table> dump.sql merci – Ergec

+0

Si vous utilisez phpmyadmin, alors ce sera mieux. – gautamlakum

+7

Vous pouvez même le rediriger: 'mysqldump --user = root --password = mot de passe distant the_database_name | mysql --user = root --password = mot de passe local the_database_name'; En général, cela peut être fait de serveur en serveur en utilisant SSH-port-forwarding: 'ssh -f -N -L 3307: localhost: 3306 nmmn' (nmmn est l'un de mes raccourcis SSH, utilisez plutôt un nom de serveur + port) ; @Ergec pour plusieurs tables utilise le param '--tables table1 table2' – feeela

5

Phpmyadmin a une fonctionnalité intégrée pour copier des tables d'une base de données à l'autre. Sinon, vous pouvez aller avec Pekka ou exporter la table puis importer la table.

+0

IIRC, la fonctionnalité intégrée ne fonctionnera que si le même utilisateur a accès aux deux bases de données. –

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

Tout peut être fait en une seule commande.

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

Si vous devez copier la table sur le même serveur, vous pouvez utiliser ce code:

USE db2; 

CREATE TABLE table2 LIKE db1.table1; 

INSERT INTO table2 
    SELECT * FROM db1.table1; 

Il est copie + collé à partir d'ici: codingforums.com

Ce n'est pas ma solution, mais Je le trouve utile.

+0

Cela devrait être la réponse acceptée. Beaucoup plus facile que la ligne de commande mysqldump. –

0

utilisation <from database>

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

Bienvenue sur stackoverflow. Je pense que votre réponse a été bousillée. S'il vous plaît essayez de le reformater en le marquant comme du code. –

+1

En l'état, cette réponse n'a pas beaucoup de sens. S'il vous plaît ajouter quelques explications, et corriger l'extrait que vous avez posté –

3

Je vais mettre cette réponse pour quelqu'un d'autre à la recherche d'aide.

Si vous n'avez pas accès à SSH, vous pouvez utiliser PhpMyAdmin.

simplement:

  1. navigation à la table que vous souhaitez déplacer
  2. Cliquez sur l'onglet Opérations
  3. Utilisez le déplacer ou copier à la fonction de base de données

Si vous rencontrez des problèmes de privilège , vous pouvez accorder à un utilisateur des autorisations globales ou ajouter le même utilisateur aux deux bases de données.

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()); 
} 

user1, pass1, database1, table1 reffers à parapher la table utilisateur2, pass2, database2, Table2 reffers à table copiée KeyField $ est la clé primaire de la table

1

Une doublure avec différents serveurs

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

fonctionne comme un charme! –