Wie benenne ich eine MySQL-Datenbank um?

48

Wie benenne ich eine MySQL-Datenbank um?

Im MySQL-Online-Handbuch wurde über den Befehl RENAME DATABASE berichtet (diese Dokumentationsseite wurde vor einiger Zeit von Oracle entfernt):

Diese Anweisung wurde in MySQL 5.1.7 hinzugefügt, wurde jedoch als gefährlich eingestuft und in MySQL 5.1.23 entfernt.

Also, wie geht es weiter? Die Begründung: Wir haben mit einem Codenamen für das Projekt begonnen und möchten, dass der Datenbankname jetzt den endgültigen Namen des Projekts widerspiegelt.

einfach
quelle
Alle vier Antworten sind sinnvoll. Es ist eine Frage mit vielen möglichen Lösungen.
Nalply

Antworten:

59

Aus diesem Blogbeitrag von Ilan Hazan:

In MySQL wird das Umbenennen von Datenbanken nicht unterstützt. Um eine MySQL-Datenbank umzubenennen, haben Sie folgende Möglichkeiten:

  1. Erstellen Sie eine neue Datenbank, und benennen Sie alle Tabellen in der alten Datenbank so um, dass sie in der neuen Datenbank enthalten sind:

    CREATE database new_db_name;
    RENAME TABLE db_name.table1 TO new_db_name, db_name.table2 TO new_db_name;
    DROP database db_name;
  2. Verwenden Sie in der Linux-Shell mysqldump, um die alte Datenbank zu sichern, und stellen Sie dann die gespeicherte Datenbank mit dem MySQL-Dienstprogramm unter einem neuen Namen wieder her. Verwenden Sie schließlich den Befehl drop database, um die alte Datenbank zu löschen. Diese Option kann bei großen Datenbanken eine schlechte Leistung erzielen.

    mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "CREATE DATABASE new_db_name"
    mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "DROP DATABASE db_name"
    
  3. Schreiben Sie ein einfaches Linux-Skript (meine Lieblingslösung)

    #!/bin/bash
    
    dbuser=xxxx
    dbpass=xxxx
    olddb=xxxx
    newdb=xxxx
    
    mysqlconn="mysql -u $dbuser -p$dbpass -h localhost"
    
    $mysqlconn -e "CREATE DATABASE $newdb"
    params=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='$olddb'")
    
    for name in $params; do
          $mysqlconn -e "RENAME TABLE $olddb.$name to $newdb.$name";
          echo "Renamed $olddb.$name to $newdb.$name";
    done;
    
    #$mysqlconn -e "DROP DATABASE $olddb"
  4. Wenn alle Ihre Tabellen MyISAM sind, können Sie den alten Datenbankordnernamen umbenennen:

    1. Fahren Sie den MySQL-Server herunter,
    2. Benennen Sie den Namen des Datenbankordners in den neuen Namen um.
    3. Starten Sie den MySQL-Server.
alexeit
quelle
Hier ist eine alternative Möglichkeit, einen Befehl zum Umbenennen von Tabellen in SQL direkt in MySQL zu generieren: blog.marceloaltmann.com/how-to-rename-a-database-in-mysql
Yves Martin
Auf diese Weise können Sie eine Abfrage für die erste Lösung erstellen. Kopieren Sie einfach die Einfügeergebnisse hinter RENAME TABLE SELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';.
Syclone
Wenn Sie die Daten jedoch nicht in die neue Datenbank einfügen, gehen sie verloren
rainman
Danke. Das ist die beste Antwort. Ich danke dir sehr!
typelogic
Dieses Skript ist super ordentlich und auf MariaDB 10.1 sofort einsatzbereit.
Luc
12

MySQL ist ein bisschen scheiße dafür. Die einzige zuverlässige Lösung ist die Verwendung phpMyAdmin.

Login-> click Scheme-> click Operations-> finden Rename database to:-> schreiben NewName> click Go.

So einfach ist das. Alle Berechtigungen werden übertragen.

spencerthayer
quelle
6
+1 für eine GUI-Lösung, aber die einfachen Befehle und Skripte in der Community-Wiki-Antwort sind auch perfekt "solide und zuverlässig"
Will Sheppard
7

Ich habe eine sehr einfache Lösung gefunden: MySQL herunterfahren, das Datenbankverzeichnis umbenennen und neu starten. Das ist alles!

Es ist ein bisschen gefährlich, wenn Sie SQL-Code oder Daten haben, die auf den alten Namen verweisen. Dann müssen Sie dies ebenfalls ändern, bevor Sie die Anwendung neu starten. Aber das musste ich nicht machen, sondern YMV.

Googeln gibt ein paar Hinweise wie diese beiden:

https://stackoverflow.com/questions/67093/how-do-i-quickly-rename-a-mysql-database-change-schema-name

http://www.delphifaq.com/faq/databases/mysql/f574.shtml

einfach
quelle
5

Ich neige dazu, eine neue Datenbank zu erstellen und dann die Tabellen aus der alten in eine .sql-Datei (mit mysqldump) zu kopieren, die Datei zu bearbeiten, eine Art von zu erledigen s/old_database/new_database/gund sie dann wieder in die neue Datenbank zu importieren .
Wahrscheinlich nicht der beste Weg, es zu tun, aber es funktioniert.

Tom O'Connor
quelle
2

Wenn Sie die Möglichkeit haben, ein MySQL Management-Tool (zB phpMyAdmin) zu verwenden, können Sie es einfach umbenennen, während sie die Abfrage für Sie erstellen.

In phpMyAdmin erstellen sie auch jede Tabelle und fügen die Daten mit "INSERT INTO ... SELECT * FROM ..." ein. Durch Verketten kopieren sie also die Daten.

Wenn Sie dies nicht tun können, würde ich empfehlen, einen Speicherauszug zu erstellen und die SQL-Datei erneut in eine neue Datenbank zu importieren.

Viel Glück!

Grüße, Ben.

Benedikt Niessen
quelle
2

Ich habe folgende Methode verwendet, um die Datenbank umzubenennen

  1. Sichern Sie die Datei mit mysqldump oder einem anderen DB - Tool, z. B. heidiSQL, mysql - Administrator usw

  2. Öffnen Sie die Sicherungsdatei (zB backupfile.sql) in einem Texteditor.

  3. Suchen und ersetzen Sie den Datenbanknamen und speichern Sie die Datei.

  4. Stellen Sie die bearbeitete SQL-Datei wieder her

Adarsha
quelle