Dans certains cas, il peut être souhaitable de modifier rapidement le nom d'une base de données MySQL. Alors qu'il existait un simple RENAME DATABASE
commande dans les anciennes versions de MySQL qui était destinée à effectuer cette tâche, RENAME DATABASE
a depuis été supprimé de toutes les versions plus récentes pour éviter les risques de sécurité.
Au lieu de cela, nous allons brièvement explorer une poignée de méthodes facultatives qui peuvent être utilisées pour renommer rapidement et en toute sécurité votre base de données MySQL.
Dumping et réimportation
Lorsque vous travaillez avec une base de données relativement petite, la méthode la plus rapide consiste généralement à utiliser le mysqldump
commande shell pour créer une copie de l'intégralité de la base de données, puis importez toutes les données dans la base de données nouvellement créée avec le nom approprié.
Commencez par émettre le mysqldump
suivant commande à partir de votre invite de shell, en remplaçant le username
approprié , password
, et oldDbName
valeurs. mysqldump
est utilisé pour créer des sauvegardes physiques d'une base de données, nous pouvons donc utiliser cette copie pour réimporter les données dans une nouvelle base de données.
$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql
Nous utilisons le -p
flag immédiatement suivi de notre mot de passe pour se connecter à la base de données (sans espace entre) et éviter les invites de saisie de mot de passe lors de l'émission de ces commandes. Assurez-vous de laisser les guillemets environnants car les mots de passe avec des caractères uniques peuvent autrement causer des problèmes d'exécution. Le -R
flag est également important et indique mysqldump
pour copier les procédures et fonctions stockées avec les données normales de la base de données.
Utilisez ensuite le mysqladmin
commande pour créer une nouvelle base de données :
$ mysqladmin -u username -p"password" create newDbName
Enfin, avec la nouvelle base de données créée, utilisez mysql
pour importer le fichier de vidage que nous avons créé dans la nouvelle base de données.
$ mysql -u username -p"password" newDbName < oldDbName.sql
Trois commandes de base et votre nouvelle base de données est créée. Une fois que vous avez vérifié que tout est comme prévu, vous pouvez procéder à la suppression de l'ancienne base de données.
Renommer des tables avec InnoDB
Si vous utilisez MySQL version 5.5 (ou supérieure), vous utilisez probablement le moteur de stockage InnoDB, ce qui simplifie la tâche de renommer les bases de données.
En bref, vous pouvez utiliser le RENAME TABLE
commande dans une invite MySQL pour modifier efficacement le nom de la base de données d'une table particulière tout en gardant le nom de la table intact. Cependant, cela nécessite que la base de données avec le nouveau nom existe déjà, alors commencez par créer une nouvelle base de données à l'aide de mysqladmin
commande shell comme vu ci-dessus.
Par exemple, si nous avons déjà un catalog
base de données que nous voulons renommer en library
, nous allons d'abord créer la nouvelle library
base de données :
$ mysqladmin -u username -p"password" create library
Connectez-vous maintenant au mysql
invite et émettez le MySQL suivant RENAME TABLE
déclaration pour une table de votre choix :
mysql> RENAME TABLE catalog.books TO library.books;
Nous venons de déplacer l'intégralité des books
table du catalog
base de données à notre nouvelle library
base de données. Cette commande peut être exécutée manuellement pour toutes les tables pertinentes comme vous le souhaitez, ou nous pouvons simplifier la tâche avec un script shell comme indiqué ci-dessous.
Utiliser un script de commande shell
Pour toutes les bases de données sauf les plus petites, émettre manuellement RENAME TABLE
les commandes pour chaque table ne seront ni très pratiques ni efficaces, mais heureusement, nous pouvons utiliser une simple commande shell en utilisant le mysql
utilitaire pour parcourir toutes les tables de notre ancienne base de données et les renommer, les déplaçant ainsi vers la nouvelle base de données.
Voici la structure de base de la commande :
$ mysql -u dbUsername -p"dbPassword" oldDatabase -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE oldDatabase.$table TO newDatabase.$table"; done
Ainsi, pour notre passage de l'ancien catalog
base de données vers la nouvelle library
base de données, nous modifierions l'instruction comme suit :
$ mysql -u dbUsername -p"dbPassword" catalog -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE catalog.$table TO library.$table"; done
Nous avons également ajouté quelques drapeaux à nos commandes :
-s
est le drapeau pour lesilent mode
il y a donc moins de sortie vers le shell.-N
empêche la sortie des noms de colonne à partir des résultats.-e
indique l'instruction qui suit le-e
le drapeau doit être exécuté puis le shell est quitté. Cela signifie que les instructions'show tables'
et"RENAME TABLE catalog.$table TO library.$table"
sont exécutées comme des instructions SQL normales, comme vous le souhaitez.
C'est tout ce qu'on peut en dire. Votre base de données MySQL est maintenant effectivement renommée.