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


Das MySQL-Handbuch unter MySQL deckt dies ab.

Normalerweise speichere ich einfach die Datenbank und importiere sie erneut mit einem neuen Namen. Dies ist keine Option für sehr große Datenbanken. 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.

Das muss funktionieren InnoDB, die Dinge sehr unterschiedlich speichert MyISAM.


801


Ursprung


Antworten:


Für InnoDB scheint das Folgende zu funktionieren: Erstellen Sie die neue leere Datenbank und benennen Sie anschließend jede Tabelle der Reihe nach in die neue Datenbank um:

RENAME TABLE old_db.table TO new_db.table;

Sie müssen die Berechtigungen danach anpassen.

Für das Skripting in einer Shell können Sie Folgendes verwenden:

mysql -u username -ppassword old_db -sNe 'show tables' | while read table; \ 
    do mysql -u username -ppassword -sNe "rename table old_db.$table to new_db.$table"; done

Oder

for table in `mysql -u root -ppassword -s -N -e "use old_db;show tables from old_db;"`; do mysql -u root -ppassword -s -N -e "use old_db;rename table old_db.$table to new_db.$table;"; done;

Hinweise: Zwischen der Option ist kein Leerzeichen -p und das Passwort. Wenn Ihre Datenbank kein Passwort enthält, entfernen Sie die -u username -ppassword Teil.

Wenn Sie Prozeduren gespeichert haben, können Sie sie auch später kopieren:

mysqldump -R old_db | mysql new_db

689



Verwenden Sie diese wenigen einfachen Befehle:

mysqldump -u username -p -v olddatabase > olddbdump.sql
mysqladmin -u username -p create newdatabase
mysql -u username -p newdatabase < olddbdump.sql

Oder um E / A zu reduzieren, verwenden Sie Folgendes wie von @Pablo Marin-Garcia vorgeschlagen:

mysqladmin -u username -p create newdatabase
mysqldump -u username -v olddatabase -p | mysql -u username -p -D newdatabase

396



Ich denke, die Lösung ist einfacher und wurde von einigen Entwicklern vorgeschlagen. phpMyAdmin hat dafür eine Operation.

Wählen Sie in phpMyAdmin die Datenbank aus, die Sie auswählen möchten. In den Registerkarten gibt es einen namens Operationen, gehen Sie zum Umbenennen. Das ist alles.

Es wird, wie viele vorgeschlagen haben, eine neue Datenbank mit dem neuen Namen erstellt, alle Tabellen der alten Datenbank in der neuen Datenbank abgelegt und die alte Datenbank gelöscht.

Enter image description here


189



Sie können mit SQL ein SQL-Skript generieren, um jede Tabelle in Ihrer Quelldatenbank an die Zieldatenbank zu übertragen.

Sie müssen die Zieldatenbank erstellen, bevor Sie das über den Befehl generierte Skript ausführen können.

Sie können eines dieser beiden Skripte verwenden (ursprünglich schlug ich das erste vor und jemand "verbesserte" meine Antwort zu verwenden) GROUP_CONCAT. Wählen Sie, aber ich bevorzuge das Original):

SELECT CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name, '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';

oder

SELECT GROUP_CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name SEPARATOR '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';

($ 1 und $ 2 sind Quelle bzw. Ziel)

Dies erzeugt einen SQL-Befehl, den Sie dann ausführen müssen.

Beachten Sie, dass GROUP_CONCAT hat eine Standardlänge, die für Datenbanken mit einer großen Anzahl von Tabellen überschritten werden kann. Sie können dieses Limit ändern, indem Sie ausführen SET SESSION group_concat_max_len = 100000000; (oder eine andere große Zahl).


92



Drei Optionen:

  1. Erstellen Sie die neue Datenbank, bringen 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.


24



Der einfache Weg

Wechseln Sie in das Datenbankverzeichnis:

cd /var/lib/mysql/

Schalte MySQL herunter ... Das 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 der Tisch ...

cd database/

mv old-name.frm new-name.frm

mv old-name.MYD new-name.MYD

mv old-name.MYI new-name.MYI

Starten Sie MySQL neu

/etc/init.d/mysql start

Erledigt...

OK, dieser Weg funktioniert nicht mit InnoDB oder BDB Datenbanken. In diesem Fall müssen Sie die Datenbank sichern und erneut importieren.


23



Ich bin erst kürzlich auf eine sehr nette Art und Weise dazu gekommen, arbeite mit MyISAM und InnoDB und bin sehr schnell:

RENAME TABLE old_db.table TO new_db.table;

Ich kann mich nicht erinnern, wo ich es gelesen habe, aber Kredit geht an jemand anderen, nicht an mich.


20



Emulation der Vermissten RENAME DATABASE Befehl in MySQL:

  1. Erstellen Sie eine neue Datenbank
  2. Erstellen Sie die Umbenennungsabfragen mit:

    SELECT CONCAT('RENAME TABLE ',table_schema,'.',table_name,
        ' TO ','new_schema.',table_name,';')
    FROM information_schema.TABLES
    WHERE table_schema LIKE 'old_schema';
    
  3. Führen Sie diese Ausgabe aus

  4. Lösche alte Datenbank

Es wurde genommen Emulation des fehlenden RENAME DATABASE-Befehls in MySQL.


18



Das ist was ich benutze:

$ mysqldump -u root -p olddb >~/olddb.sql
$ mysql -u root -p
mysql> create database newdb;
mysql> use newdb
mysql> source ~/olddb.sql
mysql> drop database olddb;

16