Je souhaite copier une table contenue dans une base de données et l'insérer dans une autre table de base de données

96

Je souhaite copier le schéma d'une table ainsi que les données de cette table dans une autre table de base de données dans une autre base de données sur un serveur en direct. Comment pourrais-je faire ça?

user1031092
la source
utiliser deux connexions à la base de données et lire la structure de la table de l'une et exécuter cette requête dans l'autre
Dau
Ces bases de données sont-elles sur des instances mysql séparées ou sur la même instance? Différentes instances peuvent être configurées avec la réplication s'il s'agit d'un processus continu.
Nick
@Nick mes bases de données sont sur différentes instances mysql. Pourriez-vous expliquer comment le copier?
johk95

Réponses:

218

Si vous souhaitez copier une table d'une base de données vers une autre base de données, vous pouvez simplement faire comme ci-dessous.

CREATE TABLE db2.table LIKE db1.table;
INSERT INTO db2.table SELECT * FROM db1.table;

la source
2
Excellente solution si la table n'a aucune contrainte de clé étrangère. J'ai utilisé ceci pour faire une copie d'une base de données entière au lieu d'une seule table. Pour cela, je recommanderais d'utiliser la commande mysqldump.
thorne51
MySQL peut désormais stocker les données de table dans des fichiers individuels (et les fichiers frm le sont également par table). Cette approche fonctionnerait sans aucun doute, mais avec d'énormes bases de données, elle est lente. Y a-t-il un autre moyen peut-être?
Alex Kovshovik
1
Cela ne fonctionne que si les bases de données sont sur le même serveur.
zgr024
10

ou simplement CREATE TABLE db2.table SELECT * FROM db1.table dans MySQL 5

HukeLau_DABA
la source
4
Cela ne copie pas des éléments tels que l'index. Il crée simplement une table basée sur un ensemble de tuples. Vous ne voulez probablement pas faire ça.
BenMQ
Oui, cette requête ne copie pas l'index
XxXk5XxX
4

Dans BASH, vous pouvez faire:

mysqldump database_1 table | mysql database_2
Billynoah
la source
2

CREATE TABLE db2.table_new AS SELECT * FROM db1.table_old

Rashi Goyal
la source
2

Si vous souhaitez simplement copier la structure, utilisez simplement

CREATE TABLE Db_Name.table1 LIKE DbName.table2;

Ps> qui ne copiera pas le schéma et les données

Hemant Shori
la source
1

utilisez simplement -

CREATE TABLE DB2.newtablename SELECT * FROM DB1.existingtablename;

Vishnu Plus
la source
0

En ligne de commande:

mysqldump -h localhost -u username -ppassword [SCHEMA] --tables [TABLE] | mysql -h otherhost -u username -ppassword [SCHEMA2]

Cela copiera la table à l'intérieur de SCHEMA sur l'hôte local vers SCHEMA2 sur l'autre hôte.

localhost et otherhost ne sont que des noms d'hôte et peuvent être identiques ou différents.

Dr général
la source