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örsilent 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.