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ń:
-s
jest flagą dlasilent mode
więc jest mniej danych wyjściowych do powłoki.-N
zapobiega wyświetlaniu nazw kolumn z wyników.-e
wskazuje instrukcję następującą po-e
flaga 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.