In einigen Fällen kann es wünschenswert sein, den Namen einer MySQL-Datenbank schnell zu ändern. Während es früher eine einfache RENAME DATABASE
gab Befehl in älteren MySQL-Versionen, der diese Aufgabe ausführen sollte, RENAME DATABASE
wurde inzwischen aus allen neueren Versionen entfernt, um Sicherheitsrisiken zu vermeiden.
Stattdessen untersuchen wir kurz eine Handvoll optionaler Methoden, mit denen Sie Ihre MySQL-Datenbank schnell und sicher umbenennen können.
Dumping und Reimport
Wenn Sie mit einer relativ kleinen Datenbank arbeiten, ist die schnellste Methode normalerweise die Verwendung von mysqldump
Shell-Befehl, um eine Dump-Kopie der gesamten Datenbank zu erstellen, und importieren Sie dann alle Daten in die neu erstellte Datenbank mit dem richtigen Namen.
Beginnen Sie mit der Ausgabe des folgenden mysqldump
Befehl von Ihrer Shell-Eingabeaufforderung aus und ersetzen Sie den entsprechenden username
, password
und oldDbName
Werte. mysqldump
wird verwendet, um physische Backups einer Datenbank zu erstellen, sodass wir diese Kopie verwenden können, um die Daten wieder in eine neue Datenbank zu importieren.
$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql
Wir verwenden das -p
Flag, unmittelbar gefolgt von unserem Passwort, um eine Verbindung zur Datenbank herzustellen (ohne Leerzeichen dazwischen) und Eingabeaufforderungen zur Passworteingabe zu vermeiden, wenn diese Befehle ausgegeben werden. Achten Sie darauf, die umgebenden Anführungszeichen beizubehalten, da Passwörter mit eindeutigen Zeichen sonst zu Ausführungsproblemen führen können. Das -R
flag ist ebenfalls wichtig und teilt mysqldump
mit um gespeicherte Prozeduren und Funktionen zusammen mit den normalen Daten aus der Datenbank zu kopieren.
Als nächstes verwenden Sie mysqladmin
Befehl zum Erstellen einer neuen Datenbank:
$ mysqladmin -u username -p"password" create newDbName
Verwenden Sie schließlich mit der neu erstellten Datenbank mysql
um die von uns erstellte Dump-Datei in die neue Datenbank zu importieren.
$ mysql -u username -p"password" newDbName < oldDbName.sql
Drei grundlegende Befehle und Ihre neue Datenbank wurde erstellt. Sobald Sie überprüft haben, dass alles wie vorgesehen ist, können Sie mit dem Entfernen der alten Datenbank fortfahren.
Umbenennen von Tabellen mit InnoDB
Wenn Sie MySQL Version 5.5 (oder höher) verwenden, verwenden Sie wahrscheinlich die InnoDB-Speicher-Engine, die das Umbenennen von Datenbanken ganz einfach macht.
Kurz gesagt, Sie können die RENAME TABLE
verwenden Befehl innerhalb einer MySQL-Eingabeaufforderung, um den Datenbanknamen effektiv zu ändern einer bestimmten Tabelle, während der Tabellenname intakt bleibt. Dazu muss die Datenbank mit dem neuen Namen jedoch bereits vorhanden sein. Beginnen Sie also mit dem Erstellen einer neuen Datenbank mit mysqladmin
Shell-Befehl wie oben gezeigt.
Zum Beispiel, wenn wir bereits einen catalog
haben Datenbank, die wir in library
umbenennen möchten , würden wir zuerst die neue library
erstellen Datenbank:
$ mysqladmin -u username -p"password" create library
Verbinden Sie sich nun mit mysql
und führen Sie die folgende MySQL RENAME TABLE
aus Anweisung für eine Tabelle Ihrer Wahl:
mysql> RENAME TABLE catalog.books TO library.books;
Wir haben gerade alle books
verschoben Tabelle aus dem catalog
Datenbank zu unserer neuen library
Datenbank. Dieser Befehl kann nach Wunsch für alle relevanten Tabellen manuell ausgeführt werden, oder wir können die Aufgabe mit einem Shell-Skript vereinfachen, wie unten gezeigt.
Ein Shell-Befehlsskript verwenden
Für alle außer den kleinsten Datenbanken, manuelle Ausgabe von RENAME TABLE
Befehle für jede Tabelle sind weder sehr praktisch noch effizient, aber zum Glück können wir einen einfachen Shell-Befehl mit mysql
verwenden Dienstprogramm, um alle Tabellen in unserer alten Datenbank zu durchlaufen und umzubenennen, wodurch sie in die neue Datenbank verschoben werden.
Dies ist die Grundstruktur des Befehls:
$ 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
Also für unseren Umzug aus dem alten catalog
Datenbank in die neue library
Datenbank ändern wir die Anweisung wie folgt:
$ 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
Wir haben unseren Befehlen auch ein paar Flags hinzugefügt:
-s
ist das Flag fürsilent mode
daher gibt es weniger Ausgabe an die Shell.-N
verhindert die Ausgabe von Spaltennamen aus den Ergebnissen.-e
gibt die Anweisung an, die auf-e
folgt Flag sollte ausgeführt werden dann wird die Shell beendet. Gemeint sind damit die Anweisungen'show tables'
und"RENAME TABLE catalog.$table TO library.$table"
werden wie gewünscht als normale SQL-Anweisungen ausgeführt.
Das ist alles dazu. Ihre MySQL-Datenbank ist jetzt effektiv umbenannt.