Mysql
 sql >> Database >  >> RDS >> Mysql

Come rinominare un database in MySQL

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 per silent 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.