Das MySQL-Handbuch unter MySQL behandelt dies.
Normalerweise speichere ich die Datenbank einfach und importiere sie mit einem neuen Namen erneut. Dies ist keine Option für sehr große Datenbanken. AnscheinendRENAME {DATABASE | SCHEMA} db_name TO new_db_name;
macht es schlechte Dinge, existiert nur in einer Handvoll Versionen und ist insgesamt eine schlechte Idee .
Dies muss mit InnoDB funktionieren , das die Dinge ganz anders speichert als MyISAM .
RENAME DATABASE
Anweisung implementieren, die keine Gefahren birgt, da es derzeit keine einfache Möglichkeit gibt, diese Aufgabe auszuführen. Es gibt keinen offensichtlichen Grund, warum dies in der Dokumentation gefährlich war, sodass sie in der Lage sein sollten, einen Ersatz vorzunehmen. Zumindest haben die Leute Fehler bei der Funktionsanforderung auf ihrer Website veröffentlicht. Zum Beispiel bugs.mysql.com/bug.php?id=58593 und bugs.mysql.com/bug.php?id=1698 .Antworten:
Für InnoDB scheint Folgendes zu funktionieren: Erstellen Sie die neue leere Datenbank und benennen Sie dann jede Tabelle der Reihe nach in die neue Datenbank um:
Danach müssen Sie die Berechtigungen anpassen.
Für die Skripterstellung in einer Shell können Sie eine der folgenden Methoden verwenden:
ODER
Anmerkungen:
-p
und dem Passwort ist kein Leerzeichen . Wenn Ihre Datenbank kein Kennwort hat, entfernen Sie das-u username -ppassword
Teil.Wenn eine Tabelle einen Trigger hat, kann sie mit der obigen Methode nicht in eine andere Datenbank verschoben werden (führt zu einem
Trigger in wrong schema
Fehler). Wenn dies der Fall ist, verwenden Sie eine herkömmliche Methode, um eine Datenbank zu klonen, und löschen Sie dann die alte:mysqldump old_db | mysql new_db
Wenn Sie Prozeduren gespeichert haben, können Sie diese anschließend kopieren:
mysqldump -R old_db | mysql new_db
quelle
DROP VIEW
undCREATE VIEW
stattdessen. Unbeholfen, ja. Möglicherweise möchten Sie a ausführenmysqldump
, um die Ansichten zu verschieben, nachdem Sie zuerst alle Tabellen verschoben haben. Beachten Sie auch, dassSHOW TABLES
Tabellen UND Ansichten angezeigt werden.RENAME DATABASE
entfernt wurde: dev.mysql.com/worklog/task/?id=4030Verwenden Sie diese wenigen einfachen Befehle:
Um die E / A zu reduzieren, verwenden Sie Folgendes, wie von @Pablo Marin-Garcia vorgeschlagen:
quelle
-p<password>
statt-p
überall, damit die Anweisungen ohne Aufforderung ausgeführt werden .Enter password: Enter password:
Es scheint ein Passwort zu sein, aber nicht beide. Vermisse ich ein Detail?--routines
Flag auch wirklich zu den mysqldump-Befehlen hinzufügen , um sicherzustellen, dass gespeicherte Prozeduren kopiert werden.Ich denke, die Lösung ist einfacher und wurde von einigen Entwicklern vorgeschlagen. phpMyAdmin hat hierfür eine Operation.
Wählen Sie in phpMyAdmin die Datenbank aus, die Sie auswählen möchten. In den Registerkarten gibt es eine mit dem Namen "Operationen". Gehen Sie zum Abschnitt "Umbenennen". Das ist alles.
Wie von vielen vorgeschlagen, wird eine neue Datenbank mit dem neuen Namen erstellt, alle Tabellen der alten Datenbank in die neue Datenbank kopiert und die alte Datenbank gelöscht.
quelle
Mit SQL können Sie ein SQL-Skript generieren, um jede Tabelle in Ihrer Quellendatenbank in die Zieldatenbank zu übertragen.
Sie müssen die Zieldatenbank erstellen, bevor Sie das aus dem Befehl generierte Skript ausführen können.
Sie können eines dieser beiden Skripte verwenden (ich habe ursprünglich das erstere vorgeschlagen und jemand hat meine Antwort "verbessert"
GROUP_CONCAT
. Treffen Sie Ihre Wahl, aber ich bevorzuge das Original):oder
($ 1 und $ 2 sind Quelle bzw. Ziel)
Dadurch wird ein SQL-Befehl generiert, den Sie dann ausführen müssen.
Beachten Sie, dass
GROUP_CONCAT
die Standardlängenbeschränkung für Datenbanken mit einer großen Anzahl von Tabellen überschritten werden kann. Sie können dieses Limit ändern, indem SieSET SESSION group_concat_max_len = 100000000;
(oder eine andere große Anzahl) ausführen.quelle
Emulieren des fehlenden
RENAME DATABASE
Befehls in MySQL:Erstellen Sie die Umbenennungsabfragen mit:
Führen Sie diese Ausgabe aus
Es wurde aus dem Emulieren des fehlenden Befehls RENAME DATABASE in MySQL übernommen .
quelle
Drei Optionen:
Erstellen Sie die neue Datenbank, fahren Sie den Server herunter, verschieben Sie die Dateien von einem Datenbankordner in den anderen und starten Sie den Server neu. Beachten Sie, dass dies nur funktioniert, wenn ALLE Ihre Tabellen MyISAM sind.
Erstellen Sie die neue Datenbank, verwenden Sie die Anweisungen CREATE TABLE ... LIKE und dann die Anweisungen INSERT ... SELECT * FROM.
Verwenden Sie mysqldump und laden Sie es mit dieser Datei neu.
quelle
Der einfache Weg
Wechseln Sie in das Datenbankverzeichnis:
MySQL herunterfahren ... Das ist wichtig!
Okay, dieser Weg funktioniert nicht für InnoDB- oder BDB-Datenbanken.
Datenbank umbenennen:
... oder der Tisch ...
Starten Sie MySQL neu
Erledigt...
OK, diese Methode funktioniert nicht mit InnoDB- oder BDB-Datenbanken. In diesem Fall müssen Sie die Datenbank sichern und erneut importieren.
quelle
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist cd /usr/local/var/mysql mv old-name new-name launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Sie können dieses Shell-Skript verwenden:
Referenz: Wie benenne ich eine MySQL-Datenbank um?
Es funktioniert:
quelle
set -e
habe am Anfang des Skripts hinzugefügt , wodurch die Ausführung bei einem Fehler beendet wird und das Problem behoben werden sollte.Ich bin erst kürzlich auf eine sehr schöne Art und Weise gestoßen, arbeite mit MyISAM und InnoDB und bin sehr schnell:
Ich erinnere mich nicht, wo ich es gelesen habe, aber das Verdienst geht an jemand anderen, nicht an mich.
quelle
Einfachste kugelsichere Methode zum vollständigen Umbenennen (einschließlich des Löschens der alten Datenbank am Ende, sodass es sich eher um eine Umbenennung als um eine Kopie handelt) :
Schritte:
quelle
Das benutze ich:
quelle
MySQL unterstützt derzeit das Umbenennen einer Datenbank über die Befehlsoberfläche nicht. Sie können die Datenbank jedoch umbenennen, wenn Sie Zugriff auf das Verzeichnis haben, in dem MySQL seine Datenbanken speichert. Bei Standardinstallationen von MySQL befindet sich diese normalerweise im Datenverzeichnis unter dem Verzeichnis, in dem MySQL installiert wurde. Suchen Sie den Namen der Datenbank, die Sie umbenennen möchten, im Datenverzeichnis und benennen Sie ihn um. Das Umbenennen des Verzeichnisses kann jedoch zu Berechtigungsproblemen führen. Sei vorsichtig.
Hinweis: Sie müssen MySQL stoppen, bevor Sie die Datenbank umbenennen können
Ich würde empfehlen, eine neue Datenbank zu erstellen (unter Verwendung des gewünschten Namens) und die benötigten Daten von der alten in die neue zu exportieren / importieren. Ziemlich einfach.
quelle
Wenn Sie eine Datenbank in PHPMyAdmin umbenennen, wird ein Speicherauszug erstellt. Anschließend wird die Datenbank gelöscht und unter dem neuen Namen neu erstellt.
quelle
Nun, es gibt 2 Methoden:
Methode 1: Eine bekannte Methode zum Umbenennen des Datenbankschemas besteht darin, das Schema mit Mysqldump zu sichern, es in einem anderen Schema wiederherzustellen und dann das alte Schema zu löschen (falls erforderlich).
Von Shell
Obwohl die obige Methode einfach ist, ist sie zeit- und platzaufwendig. Was ist, wenn das Schema mehr als 100 GB umfasst?Es gibt Methoden, mit denen Sie die oben genannten Befehle zusammenfügen können, um Platz zu sparen. Dies spart jedoch keine Zeit.
Um solche Situationen zu beheben, gibt es eine andere schnelle Methode zum Umbenennen von Schemas. Dabei muss jedoch einige Sorgfalt angewendet werden.
Methode 2: MySQL bietet eine sehr gute Funktion zum Umbenennen von Tabellen, die sogar in verschiedenen Schemas funktioniert. Diese Umbenennungsoperation ist atomar und niemand anderes kann auf die Tabelle zugreifen, während sie umbenannt wird. Dies dauert nur kurze Zeit, da das Ändern des Namens oder des Schemas einer Tabelle nur eine Änderung der Metadaten ist. Hier ist ein prozeduraler Ansatz beim Umbenennen:
Erstellen Sie das neue Datenbankschema mit dem gewünschten Namen. Benennen Sie die Tabellen mit dem MySQL-Befehl "RENAME TABLE" vom alten in das neue Schema um. Löschen Sie das alte Datenbankschema.
If there are views, triggers, functions, stored procedures in the schema, those will need to be recreated too
. MySQLs "RENAME TABLE" schlägt fehl, wenn Trigger in den Tabellen vorhanden sind. Um dies zu beheben, können wir folgende Dinge tun:1)
Dump the triggers, events and stored routines in a separate file.
Dies erfolgt mit -E, -R-Flags (zusätzlich zu -t -d, das die Trigger ausgibt) für den Befehl mysqldump. Sobald die Trigger ausgegeben wurden, müssen sie aus dem Schema entfernt werden, damit der Befehl RENAME TABLE funktioniert.2) Erstellen Sie eine Liste mit nur "BASE" -Tabellen. Diese können mithilfe einer Abfrage in der
information_schema.TABLES
Tabelle gefunden werden.3) Speichern Sie die Ansichten in einer Out-Datei. Ansichten können mithilfe einer Abfrage in derselben
information_schema.TABLES
Tabelle gefunden werden.4) Löschen Sie die Trigger in den aktuellen Tabellen im old_schema.
5) Stellen Sie die obigen Speicherauszugsdateien wieder her, sobald alle in Schritt 2 gefundenen "Basistabellen" umbenannt wurden.
Komplikationen mit den oben genannten Methoden: Möglicherweise müssen wir die GRANTS für Benutzer so aktualisieren, dass sie mit dem richtigen Schemanamen übereinstimmen. Diese können mit einem einfachen UPDATE für die Tabellen mysql.columns_priv, mysql.procs_priv, mysql.tables_priv und mysql.db behoben werden, indem der Name des alten Schemas auf new_schema aktualisiert und "Flush privileges;" aufgerufen wird. Obwohl "Methode 2" etwas komplizierter erscheint als "Methode 1", ist dies vollständig skriptfähig. Ein einfaches Bash-Skript, mit dem Sie die oben genannten Schritte in der richtigen Reihenfolge ausführen können, kann Ihnen helfen, beim nächsten Umbenennen von Datenbankschemata Platz und Zeit zu sparen.
Das Percona Remote DBA-Team hat ein Skript namens "rename_db" geschrieben, das folgendermaßen funktioniert:
Um die Verwendung dieses Skripts zu demonstrieren, wurde ein Beispielschema "emp" verwendet, Testauslöser erstellt und Routinen in diesem Schema gespeichert. Versucht, das Datenbankschema mithilfe des Skripts umzubenennen. Der Vorgang dauert einige Sekunden, im Gegensatz zur zeitaufwändigen Dump / Restore-Methode.
Wie Sie in der obigen Ausgabe sehen können, wurde das Datenbankschema "emp" in weniger als einer Sekunde in "emp_test" umbenannt. Schließlich ist dies das Skript von Percona, das oben für "Methode 2" verwendet wird.
quelle
Schritte :
quelle
Für Mac-Benutzer bietet Sequel Pro im Menü "Datenbank" die Option "Datenbank umbenennen". http://www.sequelpro.com/
quelle
Die meisten Antworten hier sind aus einem von zwei Gründen falsch:
Percona hat einen Blog-Beitrag darüber, wie man das gut macht: https://www.percona.com/blog/2013/12/24/renaming-database-schema-mysql/
und ein Skript von Simon R Jones, das das tut, was in diesem Beitrag vorgeschlagen wird. Ich habe einen Fehler behoben, den ich im Skript gefunden habe. Sie können es hier sehen:
https://gist.github.com/ryantm/76944318b0473ff25993ef2a7186213d
Hier ist eine Kopie davon:
Speichern Sie es in einer Datei namens
rename_db
und machen Sie das Skript ausführbar mitchmod +x rename_db
und verwenden Sie es dann wie folgt./rename_db localhost old_db new_db
quelle
Es ist möglich, alle Tabellen in einer Datenbank so umzubenennen, dass sie sich unter einer anderen Datenbank befinden, ohne einen vollständigen Speicherauszug durchführen und wiederherstellen zu müssen.
Auslöser in der Ziel-Datenbank sind jedoch nicht zufriedenstellend. Sie müssen sie zuerst löschen und nach dem Umbenennen neu erstellen.
quelle
mysql --batch-uroot -e "call mysql.rename_db('test', 'blah2');" | mysql -uroot
Beachten Sie, dass Sie --batch verwenden müssen, um die Formatierung in eine Rohformatierung zu ändern, die die Ergebnisse ohne Formatierung ausgibt.Hier ist eine Batch-Datei, die ich geschrieben habe, um sie über die Befehlszeile zu automatisieren, aber für Windows / MS-DOS.
Die Syntax lautet rename_mysqldb database newdatabase -u [Benutzer] -p [Passwort]
quelle
Die gespeicherte Prozedur von TodoInTX hat bei mir nicht ganz funktioniert. Hier ist mein Stich:
quelle
Die einfachste Methode ist die Verwendung der HeidiSQL-Software. Es ist kostenlos und Open Source. Es läuft unter Windows und unter jedem Linux mit Wine (führen Sie Windows-Anwendungen unter Linux, BSD, Solaris und Mac OS X aus).
Um HeidiSQL herunterzuladen, gehen Sie zu http://www.heidisql.com/download.php .
Um Wine herunterzuladen, gehen Sie zu http://www.winehq.org/ .
Um eine Datenbank in HeidiSQL umzubenennen, klicken Sie einfach mit der rechten Maustaste auf den Datenbanknamen und wählen Sie 'Bearbeiten'. Geben Sie dann einen neuen Namen ein und drücken Sie 'OK'.
Es ist so einfach.
quelle
Database "database_name" contains stored routine(s) which cannot be moved.
Trigger (zumindest für die MariDB-Datenbank) werden als gespeicherte Routinen gezählt. Ich hatte keine gespeicherten Prozeduren, konnte die Datenbank jedoch nicht umbenennen, bis ich alle Trigger gelöscht hatte.Für Mac-Benutzer können Sie
Sequel Pro
(kostenlos) verwenden, die nur die Option zum Umbenennen von Datenbanken bieten. Die alte Datenbank wird jedoch nicht gelöscht.Sobald Sie die entsprechende Datenbank geöffnet haben, klicken Sie einfach auf:
Database
->Rename database...
quelle
Ich habe eine Frage zu Server Fault gestellt, bei der versucht wurde, Ausfallzeiten beim Wiederherstellen sehr großer Datenbanken mithilfe von MySQL Proxy zu umgehen. Ich hatte keinen Erfolg, aber am Ende wurde mir klar, dass ich die RENAME DATABASE-Funktionalität wollte, da Dump / Import aufgrund der Größe unserer Datenbank keine Option war.
In MySQL ist eine RENAME TABLE-Funktion integriert, sodass ich ein einfaches Python-Skript geschrieben habe, um die Aufgabe für mich zu erledigen. Ich habe es auf GitHub gepostet, falls es für andere von Nutzen sein könnte.
quelle
RENAME TABLE
, dass diese Aussage in MySQL 5.1.7 hinzugefügt wurde , sondern sich als gefährlich erwiesen und wurde in MySQL 5.1.23 entfernt.Im Folgenden finden Sie ein kleines Shellscript, das mit zwei Parametern ausgeführt werden muss: Datenbankname und neuer Datenbankname.
Möglicherweise müssen Sie den MySQL-Zeilen Anmeldeparameter hinzufügen, wenn Sie die Datei .my.cnf nicht in Ihrem Home-Verzeichnis verwenden. Bitte erstellen Sie ein Backup, bevor Sie dieses Skript ausführen.
quelle
Es scheint, dass niemand dies erwähnt hat, aber hier ist ein anderer Weg:
dann für jede Tabelle:
dann, wenn du willst,
Dieser Ansatz hätte den Vorteil, dass die gesamte Übertragung auf einem Server mit nahezu null Netzwerkverkehr durchgeführt wird, sodass er viel schneller abläuft als ein Dump / Restore.
Wenn Sie Prozeduren / Ansichten / usw. gespeichert haben, möchten Sie diese möglicherweise auch übertragen.
quelle
create database
Anweisung nicht? Woher hast du das?create table like
Syntax: dev.mysql.com/doc/refman/5.7/en/create-table-like.html . In Bezug auf das Erstellen einer Datenbank scheint MySQL diese Klausel seitdem fallen gelassen zu haben.Hier ist eine schnelle Möglichkeit, ein SQL-Umbenennungsskript zu generieren, wenn Sie viele Tabellen verschieben müssen.
quelle
ALTER DATABASE
ist der von MySQL vorgeschlagene Weg, dies zu umgehen, undRENAME DATABASE
wird verworfen.Ab 13.1.32 RENAME DATABASE Syntax :
Diese Anweisung wurde in MySQL 5.1.7 hinzugefügt, wurde jedoch als gefährlich eingestuft und in MySQL 5.1.23 entfernt.
quelle
alter database
, die Datenbank selbst umzubenennen, und die Dokumentation, auf die Sie verlinkt haben, deutet nicht darauf hin, dass dies möglich ist.Gehen Sie in MySQL Administrator wie folgt vor:
quelle
In phpmyadmin können Sie die Datenbank einfach umbenennen
Bitten Sie darum, die alte Tabelle zu löschen und die Tabellendaten neu zu laden. Klicken Sie in beiden Fällen auf OK
Ihre Datenbank wird umbenannt
quelle
Wenn Sie phpMyAdmin verwenden , können Sie zur Registerkarte "Operationen" wechseln, nachdem Sie die Datenbank ausgewählt haben, die Sie umbenennen möchten. Gehen Sie dann zum letzten Abschnitt "Datenbank kopieren nach" (oder so ähnlich), geben Sie einen Namen ein und wählen Sie die folgenden Optionen aus. In diesem Fall müssen Sie vermutlich die Kontrollkästchen "Struktur und Daten" und "Datenbank vor dem Kopieren erstellen" aktivieren und schließlich in diesem Abschnitt auf die Schaltfläche "Los" klicken.
Übrigens verwende ich phpMyAdmin auf Spanisch, daher bin ich mir nicht sicher, wie die Namen der Abschnitte auf Englisch lauten.
quelle