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?
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
).
À 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
$ 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
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
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 .
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
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;
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
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
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.
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
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.
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.