Come rinominare un database MySQL?


48

Come rinominare un database MySQL?

Il manuale online di MySQL ha parlato del comando RENAME DATABASE (questa pagina di documentazione è stata rimossa da Oracle qualche tempo fa):

Questa affermazione è stata aggiunta in MySQL 5.1.7 ma è risultata pericolosa ed è stata rimossa in MySQL 5.1.23.

Quindi, come procedere? La logica: abbiamo iniziato con un nome in codice per il progetto e ora vogliamo che il nome del database rifletta il nome definitivo del progetto.


Tutte e quattro le risposte hanno un senso. È una domanda con molte possibili soluzioni.
nalply


Risposte:


59

Da questo post sul blog di Ilan Hazan:

In MySQL non esiste supporto per la ridenominazione del database. Per rinominare un database MySQL è possibile effettuare una delle seguenti operazioni:

  1. Creare un nuovo database e rinominare tutte le tabelle nel vecchio database in modo che siano nel nuovo database:

    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. Nella shell di Linux, utilizzare mysqldump per eseguire il backup del vecchio database, quindi ripristinare il database scaricato con un nuovo nome utilizzando l'utilità MySQL. Infine, utilizzare il comando drop database per eliminare il vecchio database. Questa opzione può funzionare male per database di grandi dimensioni.

    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. Scrivi un semplice script Linux (la mia soluzione preferita)

    #!/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. Se tutte le tue tabelle sono MyISAM, puoi rinominare il vecchio nome della cartella del database:

    1. Spegni il server MySQL,
    2. Rinomina il nome della cartella del database con il nuovo nome,
    3. Avviare il server MySQL.

Ecco un modo alternativo per generare direttamente il comando rinomina tabella in SQL all'interno di MySQL: blog.marceloaltmann.com/how-to-rename-a-database-in-mysql
Yves Martin

Ciò contribuirà a creare una query per la prima soluzione. Basta copiare i risultati di incolla dietro RENAME TABLE SELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';;
Syclone,

Ma se non si inseriscono i dati nel nuovo DB, questi andranno persi
Rainman,

tThanks. Questa è la risposta migliore Grazie mille!
dattiloscritto il

Quella sceneggiatura è super ordinata, pronta all'uso su MariaDB 10.1.
Luc

12

MySQL fa schifo per questo. L'unica solida soluzione affidabile è quella di utilizzare phpMyAdmin.

Login-> click Scheme-> click Operations-> trova Rename database to:-> scrivi NewName> click Go.

Così semplice. Tutte le autorizzazioni vengono trasferite.


6
+1 per una soluzione GUI, ma anche i semplici comandi e script nella risposta wiki della community sono perfettamente "solidi e affidabili"
Will Sheppard,

7

Ho trovato una soluzione molto semplice: chiudere MySQL, rinominare la directory del database e riavviare. È tutto!

È un po 'pericoloso se hai codice SQL o dati che si riferiscono al vecchio nome. Quindi è necessario modificarlo anche prima di riavviare l'applicazione. Ma non avevo bisogno di farlo, ma YMV.

Googling fornisce alcuni suggerimenti come questi due:

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


5

Tendo a creare un nuovo database, quindi a scaricare le tabelle da quello vecchio, in un file .sql (con mysqldump), modificare il file, fare una sorta di s/old_database/new_database/ge quindi reimportarlo nel nuovo db.
Probabilmente non è il modo migliore per farlo, ma funziona.


2

Se hai la possibilità di utilizzare uno strumento di gestione MySQL (ad esempio phpMyAdmin), puoi rinominarlo facilmente mentre creano la query per te.

In phpMyAdmin creano anche ogni tabella e inseriscono i dati con "INSERT INTO ... SELECT * FROM ...". Quindi concatenando copiano i dati.

Se non riesci a farlo, consiglierei di fare un dump e reimportare il file sql in un nuovo database.

In bocca al lupo!

Saluti, Ben.


2

Ho usato il seguente metodo per rinominare il database

  1. eseguire il backup del file utilizzando mysqldump o qualsiasi strumento DB, ad esempio heidiSQL, amministratore mysql ecc

  2. Apri il file di backup (ad es. Backupfile.sql) in alcuni editor di testo.

  3. Cerca e sostituisci il nome del database e salva il file.

  4. Ripristina il file sql modificato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.