Jak zmienić nazwę bazy danych MySQL?

48

Jak zmienić nazwę bazy danych MySQL?

Instrukcja online MySQL mówi o poleceniu RENAME DATABASE (ta strona dokumentacji została usunięta przez Oracle jakiś czas temu):

To oświadczenie zostało dodane w MySQL 5.1.7, ale okazało się niebezpieczne i zostało usunięte w MySQL 5.1.23.

Jak więc postępować? Uzasadnienie: Zaczęliśmy od nazwy kodowej projektu i chcemy, aby nazwa bazy danych odzwierciedlała teraz ostateczną nazwę projektu.

dokładnie
źródło
Wszystkie cztery odpowiedzi mają sens. To pytanie z wieloma możliwymi rozwiązaniami.
dokładnie

Odpowiedzi:

59

Z tego postu na blogu Ilana Hazana:

W MySQL nie ma obsługi zmiany nazwy bazy danych. Aby zmienić nazwę bazy danych MySQL, możesz wykonać jedną z następujących czynności:

  1. Utwórz nową bazę danych i zmień nazwy wszystkich tabel w starej bazie danych, aby znajdowały się w nowej bazie danych:

    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. W powłoce Linux użyj mysqldump do wykonania kopii zapasowej starej bazy danych, a następnie przywróć zrzuconą bazę danych pod nową nazwą za pomocą narzędzia MySQL. Na koniec użyj polecenia drop database, aby usunąć starą bazę danych. Ta opcja może źle działać w przypadku dużej bazy danych.

    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. Napisz prosty skrypt systemu Linux (moje ulubione rozwiązanie)

    #!/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. Jeśli wszystkie tabele to MyISAM, możesz zmienić nazwę starej nazwy folderu bazy danych:

    1. Zamknij serwer MySQL,
    2. Zmień nazwę folderu bazy danych na nową nazwę,
    3. Uruchom serwer MySQL.
alexeit
źródło
Oto alternatywny sposób na wygenerowanie polecenia zmiany nazwy tabeli w SQL bezpośrednio w MySQL: blog.marceloaltmann.com/how-to-rename-a-database-in-mysql
Yves Martin
Pomoże to utworzyć zapytanie dotyczące pierwszego rozwiązania. Po prostu skopiuj wyniki wklejania za RENAME TABLE SELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';;
Syclone
Ale jeśli nie wstawisz danych do nowej bazy danych, zostaną one utracone
Rainman
dzięki. To najlepsza odpowiedź. Dziękuję bardzo!
typelogiczny
Ten skrypt jest bardzo schludny, opracowany od razu na MariaDB 10.1.
Luc
12

MySQL jest do tego do bani. Jedynym solidnym i niezawodnym rozwiązaniem jest użycie phpMyAdmin.

Login-> click Scheme-> click Operations-> znajdź Rename database to:-> napisz NewName> click Go.

Tak proste jak to. Wszystkie uprawnienia są przenoszone.

spencerthayer
źródło
6
+1 za rozwiązanie GUI, ale proste polecenia i skrypty w odpowiedzi na wiki społeczności są również doskonale „solidne i niezawodne”
Will Sheppard
7

Znalazłem bardzo proste rozwiązanie: zamknij MySQL, zmień nazwę katalogu bazy danych i uruchom ponownie. To wszystko!

Jest to trochę niebezpieczne, jeśli masz kod SQL lub dane odnoszące się do starej nazwy. Następnie musisz to zmienić również przed ponownym uruchomieniem aplikacji. Ale nie musiałem tego robić, ale YMV.

Googling podaje kilka wskazówek, takich jak te dwa:

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

dokładnie
źródło
5

Zwykle tworzę nową bazę danych, a następnie zrzucam tabele ze starej do pliku .sql (z mysqldump), edytuję plik, robię coś, s/old_database/new_database/ga następnie ponownie importuję go do nowej bazy danych .
Prawdopodobnie nie jest to najlepszy sposób na zrobienie tego, ale działa.

Tom O'Connor
źródło
2

Jeśli masz szansę użyć narzędzia MySQL Management-Tool (np. PhpMyAdmin), możesz łatwo zmienić jego nazwę, tworząc dla Ciebie zapytanie.

W phpMyAdmin tworzą również każdą tabelę i wstawiają dane poprzez „INSERT INTO ... SELECT * FROM…”. W ten sposób kopiują dane.

Jeśli nie możesz tego zrobić, polecam zrobić zrzut i ponownie zaimportować plik SQL do nowej bazy danych.

Powodzenia!

Pozdrawiam, Ben.

Benedikt Niessen
źródło
2

Użyłem następującej metody, aby zmienić nazwę bazy danych

  1. wykonaj kopię zapasową pliku za pomocą mysqldump lub dowolnego narzędzia DB, np. heidiSQL, administrator mysql itp

  2. Otwórz plik kopii zapasowej (np. Backupfile.sql) w edytorze tekstu.

  3. Wyszukaj i zamień nazwę bazy danych i zapisz plik.

  4. Przywróć edytowany plik sql

Adarsha
źródło