Comment renommer une base de données MySQL?

48

Comment renommer une base de données MySQL?

Le manuel en ligne de MySQL mentionne la commande RENAME DATABASE (cette page de documentation a été supprimée par Oracle il y a quelque temps):

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.

Alors, comment procéder? La raison: nous avons commencé avec un nom de code pour le projet et nous souhaitons que le nom de la base de données reflète maintenant le nom définitif du projet.

simplement
la source
Les quatre réponses ont du sens. C'est une question avec beaucoup de solutions possibles.
Nalply

Réponses:

59

De ce billet de blog d'Ilan Hazan:

Dans MySQL, le renommage de la base de données n’est pas pris en charge. Pour renommer une base de données MySQL, vous pouvez effectuer l’une des opérations suivantes:

  1. Créez une nouvelle base de données et renommez toutes les tables de l'ancienne base pour qu'elles soient dans la nouvelle base de données:

    CREATE database new_db_name;
    RENAME TABLE db_name.table1 TO new_db_name, db_name.table2 TO new_db_name;
    DROP database db_name;
  2. Dans le shell Linux, utilisez mysqldump pour sauvegarder l'ancienne base de données, puis restaurez la base de données vidée sous un nouveau nom à l'aide de l'utilitaire MySQL. Enfin, utilisez la commande drop database pour supprimer l’ancienne base de données. Cette option peut mal fonctionner pour une base de données volumineuse.

    mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "CREATE DATABASE new_db_name"
    mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "DROP DATABASE db_name"
    
  3. Écrire un script Linux simple (ma solution préférée)

    #!/bin/bash
    
    dbuser=xxxx
    dbpass=xxxx
    olddb=xxxx
    newdb=xxxx
    
    mysqlconn="mysql -u $dbuser -p$dbpass -h localhost"
    
    $mysqlconn -e "CREATE DATABASE $newdb"
    params=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='$olddb'")
    
    for name in $params; do
          $mysqlconn -e "RENAME TABLE $olddb.$name to $newdb.$name";
          echo "Renamed $olddb.$name to $newdb.$name";
    done;
    
    #$mysqlconn -e "DROP DATABASE $olddb"
  4. Si toutes vos tables sont MyISAM, vous pouvez renommer l'ancien nom du dossier de la base de données:

    1. Arrêtez le serveur MySQL,
    2. Renommez le nom du dossier de la base de données avec le nouveau nom,
    3. Démarrez le serveur MySQL.
alexeit
la source
Voici un autre moyen de générer une commande de changement de nom de table SQL dans MySQL directement: blog.marceloaltmann.com/how-to-rename-a-database-in-mysql
Yves Martin
Cela aidera à créer une requête pour la première solution. Il suffit de copier les résultats du collage derrière RENAME TABLE SELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';;
Syclone
Mais si vous
n'insérez
Merci C'est la meilleure réponse. Merci beaucoup!
Typelogic
Ce script est très soigné, sorti de la boîte sur MariaDB 10.1.
Luc
12

MySQL est un peu nul pour ça. La seule solution solide et fiable consiste à utiliser phpMyAdmin.

Login-> click Scheme-> click Operations-> trouver Rename database to:-> écrire NewName> click Go.

Aussi simple que cela. Toutes les autorisations sont reportées.

spencerthayer
la source
6
+1 pour une solution graphique, mais les commandes simples et les scripts de la réponse du wiki de la communauté sont également parfaitement "solides et fiables"
Will Sheppard
7

J'ai trouvé une solution très simple: fermez MySQL, renommez le répertoire de la base de données et redémarrez. C'est tout!

C'est un peu dangereux si vous avez du code SQL ou des données faisant référence à l'ancien nom. Ensuite, vous devez également changer cela avant de redémarrer l'application. Mais je n'avais pas besoin de faire ça, mais YMV.

Googling donne quelques indications comme celles-ci:

https://stackoverflow.com/questions/67093/how-do-i-quickly-rename-a-mysql-database-change-schema-name

http://www.delphifaq.com/faq/databases/mysql/f574.shtml

simplement
la source
5

J'ai tendance à créer une nouvelle base de données, puis à vider les tables de l'ancienne, dans un fichier .sql (avec mysqldump), à l'éditer, à en faire une sorte de s/old_database/new_database/g, puis à le réimporter dans la nouvelle base de données.
Ce n'est probablement pas la meilleure façon de le faire, mais cela fonctionne.

Tom O'Connor
la source
2

Si vous avez la possibilité d'utiliser un outil de gestion MySQL (par exemple, phpMyAdmin), vous pouvez le renommer facilement car ils créeront la requête pour vous.

Dans phpMyAdmin, ils créent également chaque table et insèrent les données par "INSERT INTO ... SELECT * FROM ...". Donc, en enchaînant, ils copient les données.

Si vous ne pouvez pas faire cela, je vous conseillerais de faire une sauvegarde et de réimporter le fichier SQL dans une nouvelle base de données.

Bonne chance!

Cordialement, Ben.

Benedikt Niessen
la source
2

J'ai utilisé la méthode suivante pour renommer la base de données

  1. effectuer une sauvegarde du fichier en utilisant mysqldump ou tout autre outil de base de données, par exemple heidiSQL, administrateur mysql, etc.

  2. Ouvrez le fichier de sauvegarde (par exemple, backupfile.sql) dans un éditeur de texte.

  3. Rechercher et remplacer le nom de la base de données et enregistrer le fichier.

  4. Restaurer le fichier SQL modifié

Adarsha
la source