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?


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;

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


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


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


1

utilisez simplement -

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


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.