sql >> Databasteknik >  >> RDS >> Mysql

Hur man byter namn på en databas i MySQL

I vissa fall kan det vara önskvärt att snabbt ändra namnet på en MySQL-databas. Även om det tidigare fanns en enkel RENAME DATABASE kommandot i äldre versioner av MySQL som var avsett att utföra denna uppgift, RENAME DATABASE har sedan tagits bort från alla nyare versioner för att undvika säkerhetsrisker.

Istället ska vi kort utforska en handfull valfria metoder som kan användas för att snabbt och säkert byta namn på din MySQL-databas.

Dumpning och återimport

När du arbetar med en relativt liten databas är den snabbaste metoden vanligtvis att använda mysqldump shell-kommando för att skapa en dumpad kopia av hela databasen, importera sedan all data till den nyskapade databasen med rätt namn.

Börja med att utfärda följande mysqldump kommandot från din skalprompt och ersätter lämpligt username , password och oldDbName värden. mysqldump används för att skapa fysiska säkerhetskopior av en databas, så vi kan använda denna kopia för att importera tillbaka data till en ny databas.

$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql

Vi använder -p flagga omedelbart följt av vårt lösenord för att ansluta till databasen (utan mellanslag mellan) och undvika lösenordsinmatning när du utfärdar dessa kommandon. Var noga med att lämna de omgivande citaten eftersom lösenord med unika tecken annars kan orsaka exekveringsproblem. -R flaggan är också viktig och talar om för mysqldump för att kopiera lagrade procedurer och funktioner tillsammans med normal data från databasen.

Använd sedan mysqladmin kommando för att skapa en ny databas:

$ mysqladmin -u username -p"password" create newDbName

Slutligen, med den nya databasen skapad, använd mysql för att importera dumpfilen vi skapade till den nya databasen.

$ mysql -u username -p"password" newDbName < oldDbName.sql

Tre grundläggande kommandon och din nya databas har skapats. När du har verifierat att allt är som avsett kan du fortsätta med att ta bort den gamla databasen.

Byta namn på tabeller med InnoDB

Om du använder MySQL version 5.5 (eller senare) använder du troligen InnoDB-lagringsmotorn, vilket gör uppgiften att byta namn på databaser ganska enkel.

Kort sagt, du kan använda RENAME TABLE kommandot i en MySQL-prompt för att effektivt ändra databasnamnet för en viss tabell samtidigt som tabellnamnet hålls intakt. Men att göra det kräver att databasen med det nya namnet redan finns, så börja med att skapa en ny databas med mysqladmin shell-kommando enligt ovan.

Till exempel, om vi redan har en catalog databas som vi vill byta namn på till library , skulle vi först skapa det nya library databas:

$ mysqladmin -u username -p"password" create library

Anslut nu till mysql fråga och utfärda följande MySQL RENAME TABLE uttalande för en tabell som du väljer:

mysql> RENAME TABLE catalog.books TO library.books;

Vi har precis flyttat hela books tabell från catalog databas till vårt nya library databas. Detta kommando kan köras manuellt för alla relevanta tabeller efter önskemål, eller så kan vi förenkla uppgiften med ett skalskript enligt nedan.

Använda ett Shell-kommandoskript

För alla utom de minsta databaserna, manuellt utfärdande av RENAME TABLE kommandon för varje tabell kommer inte att vara särskilt praktiska eller effektiva, men tack och lov kan vi använda ett enkelt skalkommando med mysql verktyg för att gå igenom alla tabeller i vår gamla databas och byta namn på dem och på så sätt flytta dem till den nya databasen.

Detta är den grundläggande strukturen för kommandot:

$ 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

Alltså, för vår flytt från den gamla catalog databas till det nya library databas, skulle vi ändra uttalandet enligt följande:

$ 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

Vi har också lagt till några flaggor till våra kommandon:

  • -s är flaggan för silent mode så det blir mindre utdata till skalet.
  • -N förhindrar utmatning av kolumnnamn från resultaten.
  • -e indikerar satsen som följer -e flaggan ska köras då är skalet slut. Detta betyder satserna 'show tables' och "RENAME TABLE catalog.$table TO library.$table" exekveras som vanliga SQL-satser, efter önskemål.

Det är allt som finns. Din MySQL-databas har nu faktiskt bytt namn.


  1. Hur man mappar en sträng till DB-sekvens i Hibernate

  2. ROW_NUMBER() i MySQL

  3. Installera RAC för en databas med datafiler

  4. Konfigurera PostgreSQL för observerbarhet