In sommige gevallen kan het wenselijk zijn om snel de naam van een MySQL-database te wijzigen. Terwijl er vroeger een eenvoudige RENAME DATABASE
bestond commando in oudere versies van MySQL die bedoeld was om deze taak uit te voeren, RENAME DATABASE
is sindsdien verwijderd uit alle nieuwere versies om veiligheidsrisico's te voorkomen.
In plaats daarvan zullen we kort een handvol optionele methoden onderzoeken die kunnen worden gebruikt om snel en veilig de naam van uw MySQL-database te wijzigen.
Dumpen en opnieuw importeren
Wanneer u met een relatief kleine database werkt, is de snelste methode doorgaans het gebruik van de mysqldump
shell-opdracht om een gedumpte kopie van de hele database te maken en importeer vervolgens alle gegevens in de nieuw gemaakte database met de juiste naam.
Begin met het uitgeven van de volgende mysqldump
commando uit uw shell-prompt, ter vervanging van de juiste username
, password
, en oldDbName
waarden. mysqldump
wordt gebruikt om fysieke back-ups van een database te maken, zodat we deze kopie kunnen gebruiken om de gegevens weer in een nieuwe database te importeren.
$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql
We gebruiken de -p
vlag onmiddellijk gevolgd door ons wachtwoord om verbinding te maken met de database (zonder spatie ertussen) en vermijd wachtwoordinvoer bij het geven van deze opdrachten. Zorg ervoor dat u de omringende aanhalingstekens laat, omdat wachtwoorden met unieke tekens anders uitvoeringsproblemen kunnen veroorzaken. De -R
vlag is ook belangrijk en vertelt mysqldump
om opgeslagen procedures en functies samen met de normale gegevens uit de database te kopiëren.
Gebruik vervolgens de mysqladmin
commando om een nieuwe database aan te maken:
$ mysqladmin -u username -p"password" create newDbName
Gebruik ten slotte, met de nieuwe database gemaakt, mysql
om het dumpbestand dat we hebben gemaakt in de nieuwe database te importeren.
$ mysql -u username -p"password" newDbName < oldDbName.sql
Drie basiscommando's en uw nieuwe database is gemaakt. Zodra je hebt geverifieerd dat alles is zoals bedoeld, kun je doorgaan met het verwijderen van de oude database.
Tabellen hernoemen met InnoDB
Als u MySQL versie 5.5 (of hoger) gebruikt, gebruikt u waarschijnlijk de InnoDB-opslagengine, waardoor het hernoemen van databases vrij eenvoudig is.
Kortom, u kunt de RENAME TABLE
. gebruiken commando binnen een MySQL-prompt om de databasenaam effectief te wijzigen van een bepaalde tabel terwijl de tabelnaam intact blijft. Hiervoor moet de database met de nieuwe naam echter al bestaan, dus begin met het maken van een nieuwe database met behulp van de mysqladmin
shell-commando zoals hierboven te zien is.
Als we bijvoorbeeld al een catalog
. hebben database die we willen hernoemen naar library
, zouden we eerst de nieuwe library
. maken databank:
$ mysqladmin -u username -p"password" create library
Maak nu verbinding met de mysql
prompt en geef de volgende MySQL RENAME TABLE
verklaring voor een tafel naar keuze:
mysql> RENAME TABLE catalog.books TO library.books;
We hebben zojuist het geheel van de books
verplaatst tabel uit de catalog
database naar onze nieuwe library
databank. Deze opdracht kan naar wens handmatig worden uitgevoerd voor alle relevante tabellen, of we kunnen de taak vereenvoudigen met een shellscript zoals hieronder te zien is.
Een Shell-opdrachtscript gebruiken
Voor alle behalve de kleinste databases, handmatig invoeren van RENAME TABLE
commando's voor elke tabel zullen niet erg praktisch of efficiënt zijn, maar gelukkig kunnen we een eenvoudig shell-commando gebruiken met behulp van de mysql
hulpprogramma om alle tabellen in onze oude database te doorlopen en ze een andere naam te geven, waardoor ze naar de nieuwe database worden verplaatst.
Dit is de basisstructuur van het commando:
$ 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
Dus voor onze verhuizing van de oude catalog
database naar de nieuwe library
database, zouden we de verklaring als volgt wijzigen:
$ 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
We hebben ook een paar vlaggen aan onze commando's toegevoegd:
-s
is de vlag voorsilent mode
dus er is minder output naar de shell.-N
voorkomt de uitvoer van kolomnamen uit de resultaten.-e
geeft de instructie aan die volgt op de-e
vlag moet worden uitgevoerd dan is de shell gestopt. Dit betekent dat de uitspraken'show tables'
en"RENAME TABLE catalog.$table TO library.$table"
worden naar wens uitgevoerd als normale SQL-instructies.
Dat is alles. Uw MySQL-database is nu effectief hernoemd.