In alcuni casi può essere desiderabile modificare rapidamente il nome di un database MySQL. Mentre esisteva un semplice RENAME DATABASE
comando nelle versioni precedenti di MySQL che aveva lo scopo di eseguire questa attività, RENAME DATABASE
da allora è stato rimosso da tutte le versioni più recenti per evitare rischi per la sicurezza.
Invece, esploreremo brevemente una manciata di metodi opzionali che possono essere utilizzati per rinominare in modo rapido e sicuro il tuo database MySQL.
Dumping e reimportazione
Quando si lavora con un database relativamente piccolo, il metodo più veloce è in genere quello di utilizzare mysqldump
comando shell per creare una copia di dumping dell'intero database, quindi importare tutti i dati nel database appena creato con il nome corretto.
Inizia emettendo il seguente mysqldump
comando dal prompt della shell, sostituendo il username
appropriato , password
e oldDbName
valori. mysqldump
viene utilizzato per creare backup fisici di un database, quindi possiamo utilizzare questa copia per importare nuovamente i dati in un nuovo database.
$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql
Stiamo usando il -p
flag immediatamente seguito dalla nostra password per connettersi al database (senza spazio tra) ed evitare richieste di immissione della password quando si immettono questi comandi. Assicurati di lasciare le virgolette circostanti perché le password con caratteri univoci potrebbero altrimenti causare problemi di esecuzione. Il -R
flag è anche importante e dice a mysqldump
per copiare le procedure e le funzioni memorizzate insieme ai dati normali dal database.
Quindi usa mysqladmin
comando per creare un nuovo database:
$ mysqladmin -u username -p"password" create newDbName
Infine, con il nuovo database creato, usa mysql
per importare il file di dump che abbiamo creato nel nuovo database.
$ mysql -u username -p"password" newDbName < oldDbName.sql
Tre comandi di base e il tuo nuovo database è stato creato. Dopo aver verificato che tutto sia come previsto, puoi procedere con la rimozione del vecchio database.
Rinominare le tabelle con InnoDB
Se stai utilizzando MySQL versione 5.5 (o successiva), probabilmente stai utilizzando il motore di archiviazione InnoDB, che rende il compito di rinominare i database abbastanza semplice.
In breve, puoi usare il RENAME TABLE
comando all'interno di un prompt MySQL per modificare in modo efficace il nome database di una determinata tabella mantenendo intatto il nome della tabella. Tuttavia, per farlo è necessario che il database con il nuovo nome esista già, quindi inizia creando un nuovo database usando mysqladmin
comando shell come visto sopra.
Ad esempio, se abbiamo già un catalog
database che vogliamo rinominare in library
, prima creiamo la nuova library
banca dati:
$ mysqladmin -u username -p"password" create library
Ora connettiti a mysql
chiedere ed emettere il seguente MySQL RENAME TABLE
dichiarazione per un tavolo a tua scelta:
mysql> RENAME TABLE catalog.books TO library.books;
Abbiamo appena spostato tutti i books
tabella dal catalog
database nella nostra nuova library
Banca dati. Questo comando può essere eseguito manualmente per tutte le tabelle rilevanti come desiderato, oppure possiamo semplificare l'attività con uno script di shell come mostrato di seguito.
Utilizzo di uno script dei comandi della shell
Per tutti i database tranne i più piccoli, emettendo manualmente RENAME TABLE
i comandi per ogni tabella non saranno molto pratici né efficienti, ma per fortuna possiamo usare un semplice comando di shell usando il mysql
utility per scorrere tutte le tabelle nel nostro vecchio database e rinominarle, spostandole così nel nuovo database.
Questa è la struttura di base del comando:
$ mysql -u dbUsername -p"dbPassword" oldDatabase -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE oldDatabase.$table TO newDatabase.$table"; done
Quindi, per il nostro passaggio dal vecchio catalog
database nella nuova library
database, cambieremmo la dichiarazione come segue:
$ mysql -u dbUsername -p"dbPassword" catalog -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE catalog.$table TO library.$table"; done
Abbiamo anche aggiunto alcuni flag ai nostri comandi:
-s
è il flag persilent mode
quindi c'è meno output per la shell.-N
impedisce l'output dei nomi delle colonne dai risultati.-e
indica l'istruzione che segue il-e
flag dovrebbe essere eseguito quindi la shell viene chiusa. Ciò significa le istruzioni'show tables'
e"RENAME TABLE catalog.$table TO library.$table"
vengono eseguiti come normali istruzioni SQL, come desiderato.
Questo è tutto ciò che c'è da fare. Il tuo database MySQL è ora effettivamente rinominato.