Maison  >  Questions et réponses  >  le corps du texte

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

<p>Comment renommer rapidement une base de données MySQL (changer son nom de schéma) ? </p> <p>Habituellement, je vide simplement la base de données et la réimporte avec un nouveau nom. Pour les très grandes bases de données, ce n'est pas une option. Apparemment, <code>RENAMED {DATABASE|SCHEMA} db_name TO new_db_name;</code> fait quelque chose de mal, n'existe que dans quelques versions et est globalement une mauvaise idée. </p> <p>Ceci doit être utilisé avec InnoDB, qui stocke un contenu très différent de celui de MyISAM. </p>
P粉320361201P粉320361201423 Il y a quelques jours528

répondre à tous(2)je répondrai

  • P粉662089521

    P粉6620895212023-08-24 11:11:03

    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

    répondre
    0
  • P粉949190972

    P粉9491909722023-08-24 10:59:25

    Pour InnoDB, ce qui suit semble fonctionner : créez une nouvelle base de données vide, puis renommez chaque table tour à tour en la nouvelle base de données :

    RENAME TABLE old_db.table TO new_db.table;

    Vous devrez ensuite ajuster les autorisations.

    Pour écrire des scripts dans le 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;

    Remarque :

      Rubrique
    • Options-p和密码之间没有空格。如果您的数据库没有密码,请删除 -u username -ppassword.
    • Si une table a des déclencheurs, elle ne peut pas être déplacée vers une autre base de données en utilisant la méthode ci-dessus (cela entraînera une 触发器错误架构erreur). Si tel est le cas, clonez la base de données en utilisant les méthodes traditionnelles puis supprimez l'ancienne base de données :

      <代码>mysqldump old_db | mysql new_db

    • Si vous avez des procédures stockées, vous pouvez ensuite les copier :

      <代码>mysqldump -R old_db | mysql new_db

    répondre
    0
  • Annulerrépondre