web-dev-qa-db-fra.com

Comment renommer une base de données MySQL?

Comment renommer une base de données MySQL?

Le manuel en ligne MySQL a dit à propos de 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 justification: nous avons commencé avec un nom de code pour le projet et voulons que le nom de la base de données reflète maintenant le nom définitif du projet.

53
nalply

De this article de blog par Ilan Hazan:

Dans MySQL, il n'y a pas de support pour le changement de nom de base de données. 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 de données pour qu'elles se trouvent 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 Linux Shell, utilisez mysqldump pour sauvegarder l'ancienne base de données, puis restaurez la base de données sauvegardé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 grande base de données.

    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 simple script Linux (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.
63
alexeit

MySQL craint un peu pour cela. La seule solution solide et fiable consiste à utiliser phpMyAdmin.

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

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

12
spencerthayer

J'ai trouvé une solution très simple: arrêtez 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 modifier cela avant de redémarrer l'application. Mais je n'avais pas besoin de faire ça, mais YMV.

La recherche sur Google donne quelques conseils comme ceux-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

7
nalply

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

5
Tom O'Connor

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

  1. prendre 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. Recherchez et remplacez le nom de la base de données et enregistrez le fichier.

  4. Restaurer le fichier sql modifié

2
Adarsha

Si vous avez la possibilité d'utiliser un outil de gestion MySQL (par exemple phpMyAdmin), vous pouvez le renommer facilement car ils créent 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 recommanderais de faire un vidage et de réimporter le fichier sql dans une nouvelle base de données.

Bonne chance!

Cordialement, Ben.

2
Benedikt Niessen