W niektórych przypadkach może być pożądana szybka zmiana nazwy bazy danych MySQL. Kiedyś istniała prosta RENAME DATABASE polecenie w starszych wersjach MySQL, które było przeznaczone do wykonania tego zadania, RENAME DATABASE został usunięty ze wszystkich nowszych wersji, aby uniknąć zagrożeń bezpieczeństwa.
Zamiast tego krótko omówimy kilka opcjonalnych metod, których można użyć do szybkiej i bezpiecznej zmiany nazwy bazy danych MySQL.
Zrzucanie i ponowne importowanie
Podczas pracy ze stosunkowo małą bazą danych najszybszą metodą jest zazwyczaj użycie mysqldump polecenie powłoki, aby utworzyć zrzuconą kopię całej bazy danych, a następnie zaimportować wszystkie dane do nowo utworzonej bazy danych o odpowiedniej nazwie.
Zacznij od wydania następującego mysqldump polecenie z wiersza poleceń powłoki, zastępując odpowiednią username , password i oldDbName wartości. mysqldump służy do tworzenia fizycznych kopii zapasowych bazy danych, więc możemy użyć tej kopii do zaimportowania danych z powrotem do nowej bazy danych.
$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql
Używamy -p natychmiast po której następuje nasze hasło, aby połączyć się z bazą danych (bez spacji) i uniknąć monitów o wprowadzenie hasła podczas wydawania tych poleceń. Pamiętaj, aby pozostawić otaczające cytaty, ponieważ hasła z unikalnymi znakami mogą w przeciwnym razie powodować problemy z wykonaniem. -R flaga jest również ważna i mówi mysqldump skopiować procedury i funkcje składowane wraz z normalnymi danymi z bazy danych.
Następnie użyj mysqladmin polecenie do utworzenia nowej bazy danych:
$ mysqladmin -u username -p"password" create newDbName
Wreszcie, po utworzeniu nowej bazy danych użyj mysql aby zaimportować utworzony przez nas plik zrzutu do nowej bazy danych.
$ mysql -u username -p"password" newDbName < oldDbName.sql
Utworzono trzy podstawowe polecenia i nową bazę danych. Po sprawdzeniu, czy wszystko jest zgodne z przeznaczeniem, możesz kontynuować usuwanie starej bazy danych.
Zmiana nazw tabel za pomocą InnoDB
Jeśli używasz MySQL w wersji 5.5 (lub nowszej), prawdopodobnie używasz silnika pamięci masowej InnoDB, co sprawia, że zmiana nazwy baz danych jest dość prosta.
W skrócie, możesz użyć RENAME TABLE polecenie w wierszu MySQL, aby skutecznie zmienić nazwę bazy danych konkretnej tabeli, zachowując nazwę tabeli nienaruszoną. Jednak wykonanie tego wymaga, aby baza danych o nowej nazwie już istniała, więc zacznij od utworzenia nowej bazy danych za pomocą mysqladmin polecenie powłoki, jak pokazano powyżej.
Na przykład, jeśli mamy już catalog baza danych, której nazwę chcemy zmienić na library , najpierw utworzymy nową library baza danych:
$ mysqladmin -u username -p"password" create library
Teraz połącz się z mysql zapytaj i wydaj następujący MySQL RENAME TABLE oświadczenie dla wybranego stołu:
mysql> RENAME TABLE catalog.books TO library.books;
Właśnie przenieśliśmy wszystkie books tabela z catalog bazy danych do naszej nowej library Baza danych. To polecenie można wykonać ręcznie dla wszystkich odpowiednich tabel, zgodnie z potrzebami, lub możemy uprościć zadanie za pomocą skryptu powłoki, jak pokazano poniżej.
Korzystanie ze skryptu poleceń powłoki
W przypadku wszystkich baz danych oprócz najmniejszych ręczne wydawanie RENAME TABLE polecenia dla każdej tabeli nie będą zbyt praktyczne ani wydajne, ale na szczęście możemy użyć prostego polecenia powłoki za pomocą mysql narzędzie do przeglądania wszystkich tabel w naszej starej bazie danych i zmiany ich nazw, a tym samym przeniesienia ich do nowej bazy danych.
Oto podstawowa struktura polecenia:
$ mysql -u dbUsername -p"dbPassword" oldDatabase -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE oldDatabase.$table TO newDatabase.$table"; done
Tak więc dla naszego przejścia ze starego catalog bazy danych do nowej library bazy danych, zmienilibyśmy oświadczenie w następujący sposób:
$ mysql -u dbUsername -p"dbPassword" catalog -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE catalog.$table TO library.$table"; done
Dodaliśmy również kilka flag do naszych poleceń:
-sjest flagą dlasilent modewięc jest mniej danych wyjściowych do powłoki.-Nzapobiega wyświetlaniu nazw kolumn z wyników.-ewskazuje instrukcję następującą po-eflaga powinna zostać wykonana wtedy powłoka zostaje zamknięta. Oznacza to, że instrukcje'show tables'i"RENAME TABLE catalog.$table TO library.$table"są wykonywane jako normalne instrukcje SQL, zgodnie z potrzebami.
To wszystko. Twoja baza danych MySQL została teraz skutecznie zmieniona.