Cloner une base de données MySQL sur la même instance MySql

je voudrais écrire un script qui copie ma base de données actuelle sitedb1 à sitedb2 sur la même instance de base de données mysql. Je sais que je peux basculer le sitedb1 dans un script sql:

mysqldump -u root -p sitedb1 >~/db_name.sql

et ensuite l'importer en sitedb2 . Y a-t-il un moyen plus simple, sans vider la première base de données dans un fichier sql?

90
demandé sur shgnInc 0000-00-00 00:00:00

14 réponses

comme le manuel le dit dans copier des bases de données vous pouvez envoyer le dump directement dans le client mysql:

mysqldump db_name | mysql new_db_name

si vous utilisez MyISAM, vous pouvez copier les fichiers, mais je ne le recommande pas. C'est un peu louche.

intégré de diverses bonnes autres réponses

les commandes mysqldump et mysql acceptent les options de réglage détails de connexion( et beaucoup plus), comme:

mysqldump -u <user name> --password=<pwd> <original db> | mysql -u <user name> -p <new db>

en outre, si la nouvelle base de données n'existe pas encore, vous devez la créer à l'avance (par exemple avec echo "create database new_db_name" | mysql -u <dbuser> -p ).

196
répondu Greg 2017-02-12 00:29:08

À L'Aide De MySQL Utilitaires

les utilitaires MySQL contiennent l'outil nice mysqldbcopy qui copie par défaut une base de données comprenant tous les objets connexes ("tables, vues, triggers, événements, procédures, fonctions, et subventions de niveau de base de données") et les données d'un serveur de base de données vers le même ou vers un autre serveur de base de données. Il ya beaucoup d'options disponibles pour personnaliser ce qui est copiée.

donc, pour répondre à la question de L'OP:

mysqldbcopy \
    --source=root:your_password@localhost \
    --destination=root:your_password@localhost \
    sitedb1:sitedb2
49
répondu Chriki 2014-07-30 13:22:20
$ mysqladmin create DB_name -u DB_user --password=DB_pass && \
    mysqldump -u DB_user --password=DB_pass DB_name | mysql -u DB_user --password=DB_pass -h DB_host DB_name
14
répondu Peru 2012-07-15 09:33:41

vous devez exécuter la commande à partir de l'invite terminal / command.

mysqldump -u <user name> -p <pwd> <original db> | mysql -u <user name> <pwd> <new db>

E. g: mysqldump -u root test_db1 | mysql -u root test_db2

cette copie test_db1 pour test_db2 et accorder l'accès à "root" @ "localhost

12
répondu Srikanth Gurram 2015-04-21 06:49:29

vous pouvez utiliser (en pseudo-code):

FOREACH tbl IN db_a:
    CREATE TABLE db_b.tbl LIKE db_a.tbl;
    INSERT INTO db_b.tbl SELECT * FROM db_a.tbl;

la raison pour laquelle je N'utilise pas la table CREATE ... SÉLECTIONNER. .. la syntaxe est de préserver les indices. Bien sûr, cela ne copie que les tables. Les vues et les procédures ne sont pas copiées, bien que cela puisse être fait de la même manière.

voir créer le tableau .

6
répondu Emil H 2009-03-23 21:28:33

le meilleur moyen et facile est d'entrer ces commandes dans votre terminal et de définir les permissions à l'utilisateur root. Fonctionne pour moi..!

:~$> mysqldump -u root -p db1 > dump.sql
:~$> mysqladmin -u root -p create db2
:~$> mysql -u root -p db2 < dump.sql
3
répondu user2468325 2017-05-29 06:24:09

créer D'abord la base de données dupliquée:

CREATE DATABASE duplicateddb;

assurez - vous que les permissions etc sont tous en place et:

mysqldump -u admin -p originaldb | mysql -u backup -p password duplicateddb;
3
répondu svg 2018-06-01 22:46:55

vous pouvez faire quelque chose comme ce qui suit:

mysqldump -u[username] -p[password] database_name_for_clone 
 | mysql -u[username] -p[password] new_database_name
2
répondu Digambar Patil 2018-06-01 22:47:42

cette déclaration a été ajoutée dans MySQL 5.1.7 mais a été jugée dangereuse et a été supprimée dans MySQL 5.1.23. Il était prévu de permettre la mise à niveau des bases de données antérieures à la version 5.1 afin d'utiliser le codage mis en œuvre dans la version 5.1 pour la mise en correspondance des noms de bases de données avec les noms de répertoires de bases de données. Cependant, l'utilisation de cet énoncé pourrait entraîner la perte du contenu de la base de données, ce qui explique pourquoi il a été supprimé. N'utilisez pas la base de données RENAME dans les versions précédentes dans lesquelles elle est présente.

pour accomplir la tâche de mise à niveau des noms de base de données avec le nouveau codage, utilisez ALTER base de données db_name mise à niveau du nom de répertoire de données à la place: http://dev.mysql.com/doc/refman/5.1/en/alter-database.html

1
répondu zacheusz 2013-05-16 11:10:11

il est préférable d'utiliser la commande mysqldbcopy pour copier la base de données d'un serveur à un autre ou au même serveur.

mysqldbcopy --source=root:root@localhost --destination=root:root@localhost database-name:database-name-clone

[MySQL]

1
répondu Rakesh C 2016-11-18 09:59:02

Je ne pense pas qu'il y ait une méthode pour faire ça. Quand PHPMyAdmin fait cela, il vide la base de données puis la ré-insère sous le nouveau nom.

0
répondu UnkwnTech 2009-03-23 21:27:24

en plus de la réponse de Greg.

le moyen le plus simple et le plus rapide si le new_db_name n'existe pas encore.

echo "create database new_db_name" | mysql -u <user> -p <pwd> 
mysqldump -u <user> -p <pwd> db_name | mysql -u <user> -p <pwd> new_db_name
0
répondu rayphi 2015-07-06 10:01:39

un moyen simple de le faire si vous avez installé phpmyadmin :

allez dans votre base de données, sélectionnez l'onglet" opération", et vous pouvez voir le bloc" copier la base de données". Utiliser et vous pouvez copier la base de données.

0
répondu fzyzcjy 2018-02-13 09:43:46

utilisez "mysqldbcopy" sur le terminal. Ce cas est bien mentionné ici . Exemple: démarrez l'invite cmd. Naviguez vers le dossier bin du serveur mySql. Lancez la requête suivante:

C:\Program Files\MySQL\MySQL Server 5.7\bin>mysqldbcopy --source=root:root@localhost --destination=root:root@localhost master:master_clone

j'essaie de copier mon "Master" db sur "master_clone" sur localhost.

0
répondu Rajneesh 2018-04-20 09:01:24