Mysql: rinominare un database

Tags: 

Le versioni recenti di mysql (dalla 5.1.23) non permettono più di fare un semplice "RENAME DATABASE" per cambiare il nome dell'intero database.

E' però possibile effettuare una query del tipo "RENAME TABLE vecchio_db.tabella TO nuovo_db.tabella" per spostare una tabella da un database all'altro. Quindi un sistema efficace per fare il rename dell'intero database è quello di creare un database con il nuovo nome, spostare tutte le tabelle li dentro, quindi eliminare il vecchio database.

Da shell potete usare questo pattern (opportunamente parametrizzato per accedere al database):

mysqladmin -u username -p create NUOVO_DB
for table in $(mysql -u root -s -N -e "show tables from VECCHIO_DB"); do rename table VECCHIO_DB.$table to NUOVO_DB.$table; done;
mysqladmin -u username -p drop VECCHIO_DB



Se volete verificare le query che verranno eseguite prima dell'esecuzione:

for table in $(mysql -u root -s -N -e "show tables from VECCHIO_DB"); do echo "rename table VECCHIO_DB.$table to NUOVO_DB.$table"; done;

Se il vecchio DB contiene dei caratteri "scomodi" (ad esempio il ".", motivo per il quale mi serviva cambiargli nome), potete usare gli apici in questo modo:

for table in $(mysql -u root -s -N -e "show tables from \`VECCHIO_DB\`"); rename table `VECCHIO_DB`.$table to NUOVO_DB.$table; done;

 

  • E' importante far notare che questo sistema ignora tutte le meta informazioni del vecchio DB (es: charset/collation di default, valori degli auto increment, stored procedures...). Se vi servono anche questi dati non può essere applicato, o dovete preoccuparvi di trasferire anche tutte queste informazioni manualmente.
  • 

    Aggiungi un commento