1145 Stimmen

Wie kann ich eine MySQL-Datenbank schnell umbenennen (Schemanamen ändern)?

Das MySQL-Handbuch unter MySQL deckt dies ab.

Normalerweise lösche ich die Datenbank und importiere sie unter einem neuen Namen erneut. Bei sehr großen Datenbanken ist das keine Option. Anscheinend RENAME {DATABASE | SCHEMA} db_name TO new_db_name; macht schlechte Dinge, existiert nur in einer Handvoll Versionen und ist insgesamt eine schlechte Idee .

Dies muss funktionieren mit InnoDB die Dinge ganz anders speichert als MyISAM .

5 Stimmen

7 Stimmen

Diese Anweisung RENAME DATABASE Syntax wurde in MySQL 5.1.7 hinzugefügt, wurde aber als gefährlich eingestuft und in MySQL 5.1.23 entfernt.

18 Stimmen

Hoffentlich wird MySQL eine neue, funktionierende RENAME DATABASE Anweisung, die keine Gefahren birgt, da es derzeit keine einfache Möglichkeit gibt, diese Aufgabe zu erledigen. Es gibt keinen offensichtlichen Grund, warum es in der Vergangenheit gefährlich war. Dokumentation Sie sollten also in der Lage sein, Ersatz zu beschaffen. Wenigstens haben die Leute auf ihrer Website Fehler in den Funktionsanforderungen angegeben. Zum Beispiel, bugs.mysql.com/fehler.php?id=58593 y bugs.mysql.com/fehler.php?id=1698 .

34voto

Grijesh Chauhan Punkte 54909

Sie können dieses Shell-Skript verwenden:

Referenz: Wie benennt man eine MySQL-Datenbank um?

#!/bin/bash
set -e # terminate execution on command failure

mysqlconn="mysql -u root -proot"
olddb=$1
newdb=$2
$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";
done;
$mysqlconn -e "DROP DATABASE $olddb"

Es klappt:

$ sh rename_database.sh oldname newname

25voto

longneck Punkte 287

Drei Optionen:

  1. 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.

  2. Erstellen Sie die neue Datenbank, verwenden Sie CREATE TABLE ... LIKE-Anweisungen, und verwenden Sie dann INSERT ... SELECT * FROM-Anweisungen.

  3. Verwenden Sie mysqldump und laden Sie mit dieser Datei neu.

23voto

DeeCee Punkte 400

Der einfache Weg

Wechseln Sie in das Datenbankverzeichnis:

cd /var/lib/mysql/

Schalten Sie MySQL ab... Dies ist wichtig!

/etc/init.d/mysql stop

Okay, dieser Weg funktioniert nicht für InnoDB oder BDB-Datenbanken.

Datenbank umbenennen:

mv old-name new-name

...oder den Tisch...

cd database/

mv old-name.frm new-name.frm

mv old-name.MYD new-name.MYD

mv old-name.MYI new-name.MYI

MySQL neu starten

/etc/init.d/mysql start

Erledigt...

OK, diese Methode funktioniert nicht mit InnoDB- oder BDB-Datenbanken. In diesem Fall müssen Sie die Datenbank dumpen und neu importieren.

21voto

Steve Chambers Punkte 33674

Der einfachste und narrensichere Weg, eine vollständig umbenennen (einschließlich der Löschung der alten Datenbank am Ende, so dass es sich um eine Umbenennung und nicht um eine Kopie handelt) :

mysqladmin -uroot -pmypassword create newdbname
mysqldump -uroot -pmypassword --routines olddbname | mysql -uroot -pmypassword newdbname
mysqladmin -uroot -pmypassword drop olddbname

Schritte:

  1. Kopieren Sie die Zeilen in Notepad.
  2. Ersetzen Sie alle Verweise auf "olddbname", "newdbname", "mypassword" (+ optional "Root") durch Ihre Entsprechungen.
  3. Führen Sie eine nach der anderen in der Befehlszeile aus (geben Sie "y" ein, wenn Sie dazu aufgefordert werden).

19voto

Amr Mostafa Punkte 21852

Ich bin erst kürzlich auf eine sehr schöne Methode gestoßen, die mit MyISAM und InnoDB funktioniert und sehr schnell ist:

RENAME TABLE old_db.table TO new_db.table;

Ich weiß nicht mehr, wo ich es gelesen habe, aber das Verdienst gebührt jemand anderem, nicht mir.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X