Le manuel MySQL de MySQL couvre cela.
Habituellement, je vide simplement la base de données et la réimporte avec un nouveau nom. Ce n'est pas une option pour les très grandes bases de données. Apparemment, RENAME {DATABASE | SCHEMA} db_name TO new_db_name;
fait de mauvaises choses, n'existe que dans une poignée de versions et est une mauvaise idée dans l'ensemble .
Cela doit fonctionner avec InnoDB , qui stocke les choses très différemment de MyISAM .
RENAME DATABASE
déclaration de travail qui ne présente aucun danger, car il n'y a pas de moyen facile de faire cette tâche actuellement. Il n'y a aucune raison évidente pour laquelle cela était dangereux dans la documentation , ils devraient donc pouvoir effectuer un remplacement. Au moins, les gens ont mis des bogues de demande de fonctionnalité sur leur site Web. Par exemple, bugs.mysql.com/bug.php?id=58593 et bugs.mysql.com/bug.php?id=1698 .Réponses:
Pour InnoDB , les éléments suivants semblent fonctionner: créez la nouvelle base de données vide, puis renommez chaque table tour à tour en nouvelle base de données:
Vous devrez ensuite ajuster les autorisations.
Pour les scripts dans un shell, vous pouvez utiliser l'une des méthodes suivantes:
OU
Remarques:
-p
et le mot de passe. Si votre base de données n'a pas de mot de passe, supprimez la-u username -ppassword
pièce.Si une table a un déclencheur, il ne peut pas être déplacé vers une autre base de données en utilisant la méthode ci-dessus (cela entraînera une
Trigger in wrong schema
erreur). Si tel est le cas, utilisez une méthode traditionnelle pour cloner une base de données, puis supprimez l'ancienne:mysqldump old_db | mysql new_db
Si vous avez des procédures stockées, vous pouvez les copier par la suite:
mysqldump -R old_db | mysql new_db
la source
DROP VIEW
et à laCREATE VIEW
place. Maladroit, oui. Vous voudrez peut-être faire unmysqldump
pour déplacer les vues, après avoir d'abord déplacé toutes les tables. Notez également queSHOW TABLES
les tables et les vues seront affichées, alors méfiez-vous.RENAME DATABASE
suppression: dev.mysql.com/worklog/task/?id=4030Utilisez ces quelques commandes simples:
Ou pour réduire les E / S, utilisez ce qui suit comme suggéré par @Pablo Marin-Garcia:
la source
-p<password>
place de-p
partout pour que les instructions s'exécutent sans qu'une invite n'apparaisse .Enter password: Enter password:
Il semble prendre un mot de passe, mais pas les deux. Suis-je en train de manquer un détail?--routines
drapeau aux commandes mysqldump, pour vous assurer que les procédures stockées sont copiées.Je pense que la solution est plus simple et a été suggérée par certains développeurs. phpMyAdmin a une opération pour cela.
Dans phpMyAdmin, sélectionnez la base de données que vous souhaitez sélectionner. Dans les onglets, il y en a un appelé Opérations, accédez à la section Renommer. C'est tout.
Comme beaucoup l'ont suggéré, il crée une nouvelle base de données avec le nouveau nom, vide toutes les tables de l'ancienne base de données dans la nouvelle base de données et supprime l'ancienne base de données.
la source
Vous pouvez utiliser SQL pour générer un script SQL pour transférer chaque table de votre base de données source vers la base de données de destination.
Vous devez créer la base de données de destination avant d'exécuter le script généré à partir de la commande.
Vous pouvez utiliser l'un de ces deux scripts (à l'origine, j'ai suggéré l'ancien et quelqu'un "amélioré" ma réponse à utiliser
GROUP_CONCAT
. Faites votre choix, mais je préfère l'original):ou
(1 $ et 2 $ sont respectivement source et cible)
Cela générera une commande SQL que vous devrez ensuite exécuter.
Notez qu'il
GROUP_CONCAT
a une limite de longueur par défaut qui peut être dépassée pour les bases de données avec un grand nombre de tables. Vous pouvez modifier cette limite en exécutantSET SESSION group_concat_max_len = 100000000;
(ou un autre grand nombre).la source
Émuler la
RENAME DATABASE
commande manquante dans MySQL:Créez les requêtes de renommage avec:
Exécutez cette sortie
Il provient de l' émulation de la commande RENAME DATABASE manquante dans MySQL .
la source
Trois options:
Créez la nouvelle base de données, arrêtez le serveur, déplacez les fichiers d'un dossier de base de données vers l'autre et redémarrez le serveur. Notez que cela ne fonctionnera que si TOUTES vos tables sont MyISAM.
Créez la nouvelle base de données, utilisez les instructions CREATE TABLE ... LIKE, puis utilisez les instructions INSERT ... SELECT * FROM.
Utilisez mysqldump et rechargez avec ce fichier.
la source
La manière simple
Accédez au répertoire de la base de données:
Arrêtez MySQL ... C'est important!
D'accord, cette méthode ne fonctionne pas pour les bases de données InnoDB ou BDB.
Renommer la base de données:
... ou la table ...
Redémarrez MySQL
Terminé...
OK, cette méthode ne fonctionne pas avec les bases de données InnoDB ou BDB. Dans ce cas, vous devez vider la base de données et la réimporter.
la source
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist cd /usr/local/var/mysql mv old-name new-name launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Vous pouvez utiliser ce script shell:
Référence: Comment renommer une base de données MySQL?
Ça marche:
la source
set -e
au début du script, ce qui entraînera la fin de l'exécution en cas d'échec et devrait atténuer ce problème.Je n'ai rencontré que récemment une très belle façon de le faire, fonctionne avec MyISAM et InnoDB et est très rapide:
Je ne me souviens pas où je l'ai lu mais le mérite revient à quelqu'un d'autre pas à moi.
la source
Manière la plus simple et infaillible de faire un changement de nom complet (y compris la suppression de l'ancienne base de données à la fin pour qu'il s'agisse d'un changement de nom plutôt que d'une copie) :
Pas:
la source
Voici ce que j'utilise:
la source
MySQL ne prend pas en charge le changement de nom d'une base de données via son interface de commande pour le moment, mais vous pouvez renommer la base de données si vous avez accès au répertoire dans lequel MySQL stocke ses bases de données. Pour les installations MySQL par défaut, cela se trouve généralement dans le répertoire Data sous le répertoire où MySQL a été installé. Recherchez le nom de la base de données que vous souhaitez renommer sous le répertoire Data et renommez-le. Le fait de renommer le répertoire pourrait cependant entraîner des problèmes d'autorisations. Être conscient.
Remarque: Vous devez arrêter MySQL avant de pouvoir renommer la base de données
Je recommanderais de créer une nouvelle base de données (en utilisant le nom que vous voulez) et d'exporter / importer les données dont vous avez besoin de l'ancien vers le nouveau. Assez simple.
la source
Lorsque vous renommez une base de données dans PHPMyAdmin, il crée un vidage, puis supprime et recrée la base de données avec le nouveau nom.
la source
Eh bien, il existe 2 méthodes:
Méthode 1: Une méthode bien connue pour renommer le schéma de base de données consiste à vider le schéma à l'aide de Mysqldump et à le restaurer dans un autre schéma, puis à supprimer l'ancien schéma (si nécessaire).
De Shell
Bien que la méthode ci-dessus soit facile, elle prend du temps et de l'espace. Et si le schéma est supérieur à 100 Go? Il existe des méthodes où vous pouvez diriger les commandes ci-dessus ensemble pour économiser de l'espace, mais cela ne fera pas gagner de temps.
Pour remédier à de telles situations, il existe une autre méthode rapide pour renommer les schémas, cependant, une certaine prudence doit être prise lors de cette opération.
Méthode 2: MySQL a une très bonne fonctionnalité pour renommer des tables qui fonctionne même sur différents schémas. Cette opération de renommage est atomique et personne d'autre ne peut accéder à la table pendant qu'elle est renommée. Cela prend un peu de temps car le changement du nom d'une table ou de son schéma n'est qu'un changement de métadonnées. Voici l'approche procédurale pour effectuer le changement de nom:
Créez le nouveau schéma de base de données avec le nom souhaité. Renommez les tables de l'ancien schéma au nouveau schéma, en utilisant la commande «RENAME TABLE» de MySQL. Supprimez l'ancien schéma de base de données.
If there are views, triggers, functions, stored procedures in the schema, those will need to be recreated too
. «RENAME TABLE» de MySQL échoue s'il existe des déclencheurs sur les tables. Pour y remédier, nous pouvons procéder comme suit:1)
Dump the triggers, events and stored routines in a separate file.
Cela se fait en utilisant les drapeaux -E, -R (en plus de -t -d qui vide les déclencheurs) à la commande mysqldump. Une fois les déclencheurs vidés, nous devrons les supprimer du schéma pour que la commande RENAME TABLE fonctionne.2) Générez une liste de tables «BASE» uniquement. Ceux-ci peuvent être trouvés en utilisant une requête sur
information_schema.TABLES
table.3) Videz les vues dans un fichier de sortie. Les vues peuvent être trouvées en utilisant une requête sur la même
information_schema.TABLES
table.4) Déposez les déclencheurs sur les tables en cours dans l'ancien_schéma.
5) Restaurez les fichiers de vidage ci-dessus une fois que toutes les tables «Base» trouvées à l'étape # 2 ont été renommées.
Intricités avec les méthodes ci-dessus: Il se peut que nous devions mettre à jour les SUBVENTIONS pour les utilisateurs afin qu'ils correspondent au nom de schéma correct. Ceux-ci pourraient être corrigés avec une simple MISE À JOUR sur mysql.columns_priv, mysql.procs_priv, mysql.tables_priv, les tables mysql.db mettant à jour le nom old_schema en new_schema et appelant «Privilèges de vidage;». Bien que la «méthode 2» semble un peu plus compliquée que la «méthode 1», elle est totalement scriptable. Un simple script bash pour exécuter les étapes ci-dessus dans le bon ordre peut vous aider à économiser de l'espace et du temps tout en renommant les schémas de base de données la prochaine fois.
L'équipe Percona Remote DBA a écrit un script appelé «rename_db» qui fonctionne de la manière suivante:
Pour démontrer l'utilisation de ce script, utilisé un exemple de schéma «emp», créé des déclencheurs de test, des routines stockées sur ce schéma. Essaiera de renommer le schéma de la base de données à l'aide du script, ce qui prend quelques secondes à terminer, contrairement à la méthode de vidage / restauration longue.
Comme vous pouvez le voir dans la sortie ci-dessus, le schéma de base de données «emp» a été renommé «emp_test» en moins d'une seconde. Enfin, il s'agit du script de Percona utilisé ci-dessus pour la «méthode 2».
la source
Pas :
la source
Pour ceux qui sont des utilisateurs de Mac, Sequel Pro a une option Renommer la base de données dans le menu Base de données. http://www.sequelpro.com/
la source
La plupart des réponses ici sont fausses pour l'une des deux raisons:
Percona a un article de blog sur la façon de bien le faire: https://www.percona.com/blog/2013/12/24/renaming-database-schema-mysql/
et script posté (fait?) par Simon R Jones qui fait ce qui est suggéré dans ce post. J'ai corrigé un bug que j'ai trouvé dans le script. Tu peux le voir ici:
https://gist.github.com/ryantm/76944318b0473ff25993ef2a7186213d
En voici une copie:
Enregistrez-le dans un fichier appelé
rename_db
et rendez le script exécutable avecchmod +x rename_db
puis utilisez-le comme./rename_db localhost old_db new_db
la source
Il est possible de renommer toutes les tables d'une base de données pour qu'elles se trouvent sous une autre base de données sans avoir à effectuer un vidage et une restauration complets.
Cependant, tous les déclencheurs dans la base de données cible ne seront pas satisfaits. Vous devrez d'abord les supprimer puis les recréer après le changement de nom.
la source
mysql --batch-uroot -e "call mysql.rename_db('test', 'blah2');" | mysql -uroot
Remarquez, vous devez utiliser --batch pour changer le formatage en formatage brut qui produit les résultats avec un formatage nul.Voici un fichier batch que j'ai écrit pour l'automatiser à partir de la ligne de commande, mais pour Windows / MS-DOS.
La syntaxe est la base de données rename_mysqldb newdatabase -u [utilisateur] -p [mot de passe]
la source
La procédure stockée de TodoInTX ne fonctionnait pas tout à fait pour moi. Voici mon coup de couteau:
la source
La méthode la plus simple consiste à utiliser le logiciel HeidiSQL. C'est gratuit et open source. Il fonctionne sur Windows et sur n'importe quel Linux avec Wine (exécutez des applications Windows sur Linux, BSD, Solaris et Mac OS X).
Pour télécharger HeidiSQL, allez à http://www.heidisql.com/download.php .
Pour télécharger Wine, rendez-vous sur http://www.winehq.org/ .
Pour renommer une base de données dans HeidiSQL, faites un clic droit sur le nom de la base de données et sélectionnez «Modifier». Saisissez ensuite un nouveau nom et appuyez sur «OK».
C'est tellement simple.
la source
Database "database_name" contains stored routine(s) which cannot be moved.
déclencheurs de message (au moins pour la base de données MariDB) sont comptés comme des routines stockées. Je n'avais aucune procédure stockée, mais je n'ai pas pu renommer la base de données tant que je n'ai pas supprimé tous les déclencheurs.Pour les utilisateurs de Mac, vous pouvez utiliser
Sequel Pro
(gratuit), qui fournit simplement l'option de renommer les bases de données. Bien qu'il ne supprime pas l'ancienne base de données.une fois ouvert la base de données pertinente, cliquez simplement sur:
Database
->Rename database...
la source
J'ai posé une question sur la défaillance du serveur en essayant de contourner les temps d'arrêt lors de la restauration de très grandes bases de données à l'aide de MySQL Proxy. Je n'ai pas eu de succès, mais j'ai finalement réalisé que je voulais la fonctionnalité RENAME DATABASE car le vidage / import n'était pas une option en raison de la taille de notre base de données.
Il y a une fonctionnalité RENAME TABLE intégrée à MySQL, j'ai donc fini par écrire un simple script Python pour faire le travail pour moi. Je l'ai posté sur GitHub au cas où il pourrait être utile à d'autres.
la source
RENAME TABLE
que cette déclaration a été ajoutée dans MySQL 5.1.7 mais s'est avérée dangereuse et a été supprimée dans MySQL 5.1.23.Pour votre commodité, voici un petit shellscript qui doit être exécuté avec deux paramètres: nom-db et nouveau nom-db.
Vous devrez peut-être ajouter des paramètres de connexion aux lignes mysql si vous n'utilisez pas le fichier .my.cnf dans votre répertoire personnel. Veuillez faire une sauvegarde avant d'exécuter ce script.
la source
Il semble que personne ne l'ait mentionné, mais voici une autre façon:
puis pour chaque table:
alors, si vous voulez,
Cette approche aurait l'avantage de faire l'intégralité du transfert sur le serveur avec un trafic réseau proche de zéro, donc cela ira beaucoup plus vite qu'une sauvegarde / restauration.
Si vous avez des procédures / vues / etc stockées, vous pouvez également les transférer.
la source
create database
déclaration? D'où tenez-vous cela?create table like
syntaxe: dev.mysql.com/doc/refman/5.7/en/create-table-like.html . En ce qui concerne la création de bases de données, il semble que MySQL ait supprimé cette clause depuis.Voici un moyen rapide de générer le changement de nom du script sql, si vous avez plusieurs tables à déplacer.
la source
ALTER DATABASE
est la solution proposée par MySQL etRENAME DATABASE
est supprimée.Depuis 13.1.32 RENAME DATABASE Syntaxe :
Cette déclaration a été ajoutée dans MySQL 5.1.7, mais elle s'est avérée dangereuse et a été supprimée dans MySQL 5.1.23.
la source
alter database
pour renommer la base de données elle-même, et la documentation à laquelle vous avez lié ne suggère pas que c'est possible.Dans l'administrateur MySQL, procédez comme suit:
la source
dans phpmyadmin, vous pouvez facilement renommer la base de données
demander de supprimer l'ancienne table et de recharger les données de la table, cliquez sur OK dans les deux
Votre base de données est renommée
la source
Si vous utilisez phpMyAdmin, vous pouvez accéder à l'onglet "opérations" une fois que vous avez sélectionné la base de données que vous souhaitez renommer. Ensuite, allez dans la dernière section "copier la base de données vers" (ou quelque chose comme ça), donnez un nom et sélectionnez les options ci-dessous. Dans ce cas, je suppose que vous devez cocher les cases "structure et données" et "créer une base de données avant de copier" et, enfin, appuyer sur le bouton "aller" dans cette section.
Soit dit en passant, j'utilise phpMyAdmin en espagnol, donc je ne suis pas sûr du nom des sections en anglais.
la source