207 votes

Le moyen le plus simple de copier une table d'une base de données à une autre ?

Quelle est la meilleure méthode pour copier les données d'une table dans une base de données vers une table dans une autre base de données lorsque les bases de données sont sous différents utilisateurs ?

Je sais que je peux utiliser

INSERT INTO database2.table2 SELECT * from database1.table1

Mais ici le problème est que les deux database1 et database2 sont sous différents utilisateurs de MySQL. Donc user1 peut accéder database1 seulement et user2 peut accéder database2 seulement. Une idée ?

6 votes

Vous pouvez accorder des subventions de niveau table aux utilisateurs. voir : dev.mysql.com/doc/refman/5.5/fr/grant.html

2 votes

Malheureusement, cela ne fonctionnera pas dans mon cas, car j'utilise un serveur d'hébergement partagé Godaddy. Ils ne permettent pas de faire de telles choses avec la base de données.

0 votes

@mmdemirbas Une table dans la base de données a presque 1 million de lignes. Le vidage de la base de données sera énorme. De plus, lorsque j'ai essayé d'exporter, seules environ 10000 lignes ont été exportées - probablement en raison de la taille importante.

142voto

mainmeat Points 71

CREATE TABLE db1.table1 SELECT * FROM db2.table1

où db1 est la destination et db2 la source.

0 votes

Cela fonctionne-t-il si les deux utilisateurs n'ont pas le droit de sélectionner des données entre eux ?

3 votes

Cela ne fonctionnera pas sur différents serveurs mysql ?

13 votes

Cela ne copie pas les index

136voto

helmor Points 141

Si vous avez un accès shell, vous pouvez utiliser mysqldump pour vider le contenu de database1.table1 et l'envoyer à mysql à database2 . Le problème ici est que table1 est toujours table1 .

mysqldump --user=user1 --password=password1 database1 table1 \
| mysql --user=user2 --password=password2 database2

Peut-être que vous devez renommer table1 à table2 avec une autre requête. D'un autre côté, vous pouvez utiliser sed pour changer table1 en table2 entre les tuyaux to.

mysqldump --user=user1 --password=password1 database1 table1 \
| sed -e 's/`table1`/`table2`/' \
| mysql --user=user2 --password=password2 database2

Si table2 existe déjà, vous pourriez ajouter les paramètres au premier mysqldump qui ne laissent pas créer la table-création.

mysqldump --no-create-info --no-create-db --user=user1 --password=password1 database1 table1 \
| sed -e 's/`table1`/`table2`/' \
| mysql --user=user2 --password=password2 database2

0 votes

Le problème, c'est que lorsqu'il est automatisé, vous devez montrer le mot de passe. S'il n'est pas automatisé et qu'il est effectué par l'utilisateur à partir de la ligne de commande, tout va bien.

0 votes

@Nelles Vous pouvez utiliser n'importe quel fichier d'options utilisateur en cascade, souvent votre fichier local. ~/.my.cnf pour stocker les informations relatives à l'utilisateur et au mot de passe sans avoir à révéler ces valeurs dans la commande elle-même. Voir dev.mysql.com/doc/refman/8.0/fr/option-files.html

29voto

mmdemirbas Points 3205

MySql Workbench : Fortement recommandé

Database Migration Tool From MySql Workbench

Cela permettra de gérer facilement les problèmes de migration. Vous pouvez migrer des tables sélectionnées de bases de données sélectionnées entre MySql et SqlServer. Vous devez absolument l'essayer.

0 votes

Je suis sur le point d'essayer, je l'ai configuré, mais je me demandais si vous aviez comparé l'efficacité de l'appareil avec celle des autres appareils. mysql Workbench la migration vers SQLYog La copie de la base de données de l'entreprise ? D'après ma recherche rapide, il semble qu'ils soient très similaires, mais mysql workbench est une fonctionnalité plus récente.

0 votes

Non, je n'ai pas essayé SQLYog.

0 votes

Il n'est pas évident de savoir comment migrer vers SQL Server depuis MySQL en utilisant MySql workbench. Je suis dans Workbench et je ne trouve aucun indice dans l'aide ou l'interface utilisateur. Je sais cependant que le SSMA pour MySQL fonctionne pour moi.

28voto

Nick M Points 31

J'utilise Navicat pour MySQL...

Il rend toute manipulation de base de données facile !

Il suffit de sélectionner les deux bases de données dans Navicat, puis de les utiliser.

 INSERT INTO Database2.Table1 SELECT * from Database1.Table1

0 votes

Utilisé sur SequelPro et a fonctionné parfaitement. Merci.

4voto

Aaron Digulla Points 143830

Essayez mysqldbcopy ( documentation )

Ou vous pouvez créer un " table fédérée "sur votre hôte cible. Les tables fédérées vous permettent de voir une table provenant d'un serveur de base de données différent comme s'il s'agissait d'une table locale. ( documentation )

Après avoir créé la table fédérée, vous pouvez copier les données à l'aide des méthodes habituelles. insert into TARGET select * from SOURCE

1 votes

J'ai lu des articles sur les tables fédérées, mais Amazon RDS (pour l'instant) ne les prend pas en charge... XP

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X