Question Comment renommer rapidement une base de données MySQL (changer le nom du schéma)?


Le manuel MySQL à MySQL couvre cela.

Habituellement, je viens de vider la base de données et de le réimporter 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, existe seulement 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 MyISAM.


801


origine


Réponses:


Pour InnoDB, ce qui suit semble fonctionner: créer la nouvelle base de données vide, puis renommer chaque table dans la nouvelle base de données:

RENAME TABLE old_db.table TO new_db.table;

Vous devrez ajuster les permissions après cela.

Pour les scripts dans un shell, vous pouvez utiliser l'une des méthodes suivantes:

mysql -u username -ppassword old_db -sNe 'show tables' | while read table; \ 
    do mysql -u username -ppassword -sNe "rename table old_db.$table to new_db.$table"; done

Ou

for table in `mysql -u root -ppassword -s -N -e "use old_db;show tables from old_db;"`; do mysql -u root -ppassword -s -N -e "use old_db;rename table old_db.$table to new_db.$table;"; done;

Notes: il n'y a pas d'espace entre l'option -p et le mot de passe. Si votre base de données n'a pas de mot de passe, supprimez -u username -ppassword partie.

De même, si vous avez des procédures stockées, vous pouvez les copier ensuite:

mysqldump -R old_db | mysql new_db

689



Utilisez ces quelques commandes simples:

mysqldump -u username -p -v olddatabase > olddbdump.sql
mysqladmin -u username -p create newdatabase
mysql -u username -p newdatabase < olddbdump.sql

Ou pour réduire les E / S, utilisez ce qui suit, comme suggéré par @Pablo Marin-Garcia:

mysqladmin -u username -p create newdatabase
mysqldump -u username -v olddatabase -p | mysql -u username -p -D newdatabase

396



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.

À partir de phpMyAdmin, sélectionnez la base de données que vous voulez sélectionner. Dans les onglets il y en a un appelé Opérations, allez dans la section renommer. C'est tout.

Comme beaucoup le suggèrent, il crée une nouvelle base de données avec le nouveau nom, vider toutes les tables de l'ancienne base de données dans la nouvelle base de données et supprimer l'ancienne base de données.

Enter image description here


189



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 ou l'autre de ces deux scripts (à l'origine, j'ai suggéré le premier et quelqu'un a "amélioré" ma réponse à utiliser GROUP_CONCAT. Faites votre choix, mais je préfère l'original):

SELECT CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name, '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';

ou

SELECT GROUP_CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name SEPARATOR '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';

(1 $ et 2 $ sont respectivement la source et la cible)

Cela va générer une commande SQL que vous devrez ensuite exécuter.

Notez que 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 cours d'exécution SET SESSION group_concat_max_len = 100000000; (ou un autre grand nombre).


92



Trois options:

  1. Créez la nouvelle base de données, faites tomber le serveur, déplacez les fichiers d'un dossier de base de données à l'autre et redémarrez le serveur. Notez que cela ne fonctionnera que si TOUTES vos tables sont MyISAM.

  2. Créez la nouvelle base de données, utilisez les instructions CREATE TABLE ... LIKE, puis utilisez les instructions INSERT ... SELECT * FROM.

  3. Utilisez mysqldump et rechargez avec ce fichier.


24



Le moyen simple

Passez au répertoire de la base de données:

cd /var/lib/mysql/

Arrêtez MySQL ... C'est important!

/etc/init.d/mysql stop

D'accord, cela ne fonctionne pas pour InnoDB ou BDB-Databases.

Renommer la base de données:

mv old-name new-name

... ou la table ...

cd database/

mv old-name.frm new-name.frm

mv old-name.MYD new-name.MYD

mv old-name.MYI new-name.MYI

Redémarrer MySQL

/etc/init.d/mysql start

Terminé...

OK, cela 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.


23



Je suis récemment tombé sur une très bonne façon de le faire, fonctionne avec MyISAM et InnoDB et est très rapide:

RENAME TABLE old_db.table TO new_db.table;

Je ne me souviens pas où je l'ai lu mais le mérite revient à quelqu'un d'autre que moi.


20