I nogle tilfælde kan det være ønskeligt hurtigt at ændre navnet på en MySQL-database. Mens der plejede at eksistere en simpel RENAME DATABASE
kommando i ældre versioner af MySQL, som var beregnet til at udføre denne opgave, RENAME DATABASE
er siden blevet fjernet fra alle nyere versioner for at undgå sikkerhedsrisici.
I stedet vil vi kort udforske en håndfuld valgfri metoder, der kan bruges til hurtigt og sikkert at omdøbe din MySQL-database.
Dumping og genimport
Når du arbejder med en relativt lille database, er den hurtigste metode typisk at bruge mysqldump
shell-kommando for at oprette en dumpet kopi af hele databasen, og importer derefter alle data til den nyoprettede database med det rigtige navn.
Begynd med at udstede følgende mysqldump
kommando fra din shell-prompt, der erstatter det relevante username
, password
og oldDbName
værdier. mysqldump
bruges til at lave fysiske sikkerhedskopier af en database, så vi kan bruge denne kopi til at importere data tilbage til en ny database.
$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql
Vi bruger -p
flag umiddelbart efterfulgt af vores adgangskode for at oprette forbindelse til databasen (uden mellemrum) og undgå adgangskodeprompter, når du udsteder disse kommandoer. Sørg for at forlade de omkringliggende citater, fordi adgangskoder med unikke tegn ellers kan forårsage udførelsesproblemer. -R
flag er også vigtigt og fortæller mysqldump
at kopiere lagrede procedurer og funktioner sammen med de normale data fra databasen.
Brug derefter mysqladmin
kommando for at oprette en ny database:
$ mysqladmin -u username -p"password" create newDbName
Til sidst, med den nye database oprettet, skal du bruge mysql
for at importere den dumpfil, vi oprettede, til den nye database.
$ mysql -u username -p"password" newDbName < oldDbName.sql
Tre grundlæggende kommandoer og din nye database er blevet oprettet. Når du har bekræftet, at alt er efter hensigten, kan du fortsætte med at fjerne den gamle database.
Omdøbning af tabeller med InnoDB
Hvis du bruger MySQL version 5.5 (eller nyere), bruger du sandsynligvis InnoDB-lagringsmotoren, som gør opgaven med at omdøbe databaser ret enkel.
Kort sagt kan du bruge RENAME TABLE
kommando i en MySQL-prompt for effektivt at ændre databasenavnet af en bestemt tabel, mens tabelnavnet bevares intakt. Det kræver dog, at databasen med det nye navn allerede eksisterer, så start med at oprette en ny database ved hjælp af mysqladmin
shell-kommando som set ovenfor.
For eksempel, hvis vi allerede har et catalog
database, som vi ønsker at omdøbe til library
, ville vi først oprette det nye library
database:
$ mysqladmin -u username -p"password" create library
Forbind nu til mysql
prompt og udstede følgende MySQL RENAME TABLE
erklæring for en tabel efter eget valg:
mysql> RENAME TABLE catalog.books TO library.books;
Vi har lige flyttet hele books
tabel fra catalog
database til vores nye library
database. Denne kommando kan udføres manuelt for alle relevante tabeller som ønsket, eller vi kan forenkle opgaven med et shell-script som vist nedenfor.
Brug af et Shell-kommandoscript
For alle undtagen de mindste databaser, manuel udstedelse af RENAME TABLE
kommandoer for hver tabel vil ikke være særlig praktisk eller effektiv, men heldigvis kan vi bruge en simpel shell-kommando ved hjælp af mysql
værktøj til at gennemgå alle tabellerne i vores gamle database og omdøbe dem, og dermed flytte dem til den nye database.
Dette er den grundlæggende struktur for kommandoen:
$ 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
Således for vores flytning fra det gamle catalog
database til det nye library
database, vil vi ændre erklæringen som følger:
$ 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 også tilføjet et par flag til vores kommandoer:
-s
er flaget forsilent mode
så der er mindre output til skallen.-N
forhindrer output af kolonnenavne fra resultaterne.-e
angiver sætningen, der følger-e
flag skal udføres så er skallen afsluttet. Det betyder sætningerne'show tables'
og"RENAME TABLE catalog.$table TO library.$table"
udføres som normale SQL-sætninger efter ønske.
Det er alt, hvad der er til det. Din MySQL-database er nu effektivt omdøbt.