Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment renommer une base de données dans MySQL

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 le silent 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.