Podręcznik MySQL w MySQL obejmuje to.
Zwykle po prostu zrzucam bazę danych i ponownie importuję ją pod nową nazwą. To nie jest opcja w przypadku bardzo dużych baz danych. Najwyraźniej RENAME {DATABASE | SCHEMA} db_name TO new_db_name;
robi złe rzeczy, istnieje tylko w kilku wersjach i ogólnie jest złym pomysłem .
To musi współpracować z InnoDB , który przechowuje rzeczy zupełnie inaczej niż MyISAM .
RENAME DATABASE
instrukcję, która nie ma żadnych zagrożeń, ponieważ obecnie nie ma łatwego sposobu na wykonanie tego zadania. Nie ma oczywistego powodu, dla którego było to niebezpieczne w dokumentacji, więc powinni być w stanie dokonać wymiany. Przynajmniej ludzie umieścili błędy w żądaniach funkcji na swojej stronie. Na przykład bugs.mysql.com/bug.php?id=58593 i bugs.mysql.com/bug.php?id=1698 .Odpowiedzi:
W przypadku InnoDB wydaje się, że działają: utwórz nową pustą bazę danych, a następnie zmień nazwę każdej tabeli kolejno na nową bazę danych:
Następnie musisz dostosować uprawnienia.
Do pisania skryptów w powłoce możesz użyć jednej z następujących opcji:
LUB
Uwagi:
-p
a hasłem nie ma spacji . Jeśli baza danych nie ma hasła, usuń-u username -ppassword
część.Jeśli jakaś tabela ma wyzwalacz, nie można go przenieść do innej bazy danych przy użyciu powyższej metody (spowoduje
Trigger in wrong schema
błąd). W takim przypadku użyj tradycyjnego sposobu sklonowania bazy danych, a następnie upuść starą:mysqldump old_db | mysql new_db
Jeśli masz procedury składowane, możesz je później skopiować:
mysqldump -R old_db | mysql new_db
źródło
DROP VIEW
iCREATE VIEW
zamiast. Niezdarny tak. Możesz chcieć zrobić a,mysqldump
aby przenieść widoki, po uprzednim przeniesieniu wszystkich tabel. Pamiętaj też, żeSHOW TABLES
pokażą tabele ORAZ widoki, więc uważaj.RENAME DATABASE
został usunięty: dev.mysql.com/worklog/task/?id=4030Użyj kilku prostych poleceń:
Lub w celu zmniejszenia liczby operacji we / wy skorzystaj z poniższych wskazówek sugerowanych przez @Pablo Marin-Garcia:
źródło
-p<password>
zamiast-p
wszędzie, aby instrukcje były wyświetlane bez monitu .Enter password: Enter password:
Wydaje się, że wymaga jednego hasła, ale nie obu. Czy brakuje mi jakiegoś szczegółu?--routines
flagę do poleceń mysqldump, aby mieć pewność, że procedury przechowywane są kopiowane.Myślę, że rozwiązanie jest prostsze i zostało zasugerowane przez niektórych programistów. phpMyAdmin ma do tego operację.
W phpMyAdmin wybierz bazę danych, którą chcesz wybrać. Na kartach jest jedna o nazwie Operacje, przejdź do sekcji zmiany nazwy. To wszystko.
Jak wielu sugeruje, tworzy nową bazę danych o nowej nazwie, zrzuca wszystkie tabele starej bazy danych do nowej bazy danych i upuszcza starą bazę danych.
źródło
Za pomocą SQL można wygenerować skrypt SQL, aby przenieść każdą tabelę w źródłowej bazie danych do docelowej bazy danych.
Musisz utworzyć docelową bazę danych przed uruchomieniem skryptu wygenerowanego z polecenia.
Możesz użyć jednego z tych dwóch skryptów (pierwotnie zasugerowałem ten pierwszy i ktoś „poprawił” moją odpowiedź
GROUP_CONCAT
. Wybierz, ale wolę oryginał):lub
(1 USD i 2 USD to odpowiednio źródło i cel)
To wygeneruje polecenie SQL, które będziesz musiał następnie uruchomić.
Należy pamiętać, że
GROUP_CONCAT
ma domyślny limit długości, który może zostać przekroczony w przypadku baz danych z dużą liczbą tabel. Możesz zmienić ten limit, uruchamiającSET SESSION group_concat_max_len = 100000000;
(lub inną dużą liczbę).źródło
Emulowanie brakującego
RENAME DATABASE
polecenia w MySQL:Utwórz zapytania o zmianę nazwy za pomocą:
Uruchom to wyjście
Został zaczerpnięty z Emulowanie brakującej komendy RENAME DATABASE w MySQL .
źródło
Trzy opcje:
Utwórz nową bazę danych, wyłącz serwer, przenieś pliki z jednego folderu bazy danych do drugiego i zrestartuj serwer. Pamiętaj, że zadziała to tylko wtedy, gdy WSZYSTKIE stoły to MyISAM.
Utwórz nową bazę danych, użyj instrukcji CREATE TABLE ... LIKE, a następnie użyj instrukcji INSERT ... SELECT * FROM.
Użyj mysqldump i przeładuj z tym plikiem.
źródło
Prosty sposób
Przejdź do katalogu bazy danych:
Zamknij MySQL ... To ważne!
Okej, ten sposób nie działa dla baz danych InnoDB ani BDB.
Zmień nazwę bazy danych:
... lub stół ...
Uruchom ponownie MySQL
Gotowy...
OK, ten sposób nie działa z bazami danych InnoDB lub BDB. W takim przypadku musisz zrzucić bazę danych i ponownie ją zaimportować.
źródło
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist cd /usr/local/var/mysql mv old-name new-name launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Możesz użyć tego skryptu powłoki:
Odniesienie: Jak zmienić nazwę bazy danych MySQL?
To działa:
źródło
set -e
na początku skryptu, co spowoduje zakończenie wykonywania po awarii i powinno złagodzić ten problem.Dopiero niedawno natknąłem się na bardzo fajny sposób, współpracuje z MyISAM i InnoDB i jest bardzo szybki:
Nie pamiętam, gdzie to przeczytałem, ale uznanie należy się komuś innemu, nie mnie.
źródło
Najprostszy wypunktowany i głupi sposób na wykonanie pełnej zmiany nazwy (w tym usunięcie starej bazy danych na końcu, aby była to zmiana nazwy zamiast kopii) :
Kroki:
źródło
Oto, czego używam:
źródło
MySQL nie obsługuje obecnie zmiany nazwy bazy danych poprzez interfejs poleceń, ale możesz zmienić nazwę bazy danych, jeśli masz dostęp do katalogu, w którym MySQL przechowuje swoje bazy danych. W przypadku domyślnych instalacji MySQL zwykle znajduje się w katalogu Data w katalogu, w którym został zainstalowany MySQL. Znajdź nazwę bazy danych, której nazwę chcesz zmienić, w katalogu Data i zmień nazwę. Zmiana nazwy katalogu może jednak powodować pewne problemy z uprawnieniami. Być świadomym.
Uwaga: musisz zatrzymać MySQL, zanim będziesz mógł zmienić nazwę bazy danych
Poleciłbym utworzyć nową bazę danych (używając żądanej nazwy) i wyeksportować / zaimportować potrzebne dane ze starej do nowej. Dość proste.
źródło
Gdy zmienisz nazwę bazy danych w PHPMyAdmin, tworzy zrzut, a następnie upuszcza i ponownie tworzy bazę danych o nowej nazwie.
źródło
Cóż, są 2 metody:
Metoda 1: Dobrze znaną metodą zmiany nazwy schematu bazy danych jest zrzucenie schematu za pomocą Mysqldump i przywrócenie go w innym schemacie, a następnie usunięcie starego schematu (w razie potrzeby).
Od Shell
Chociaż powyższa metoda jest łatwa, zajmuje dużo czasu i miejsca. Co jeśli schemat jest większy niż 100 GB?Istnieją metody, w których można połączyć powyższe polecenia razem, aby zaoszczędzić miejsce, jednak nie pozwoli to zaoszczędzić czasu.
Aby zaradzić takim sytuacjom, istnieje inna szybka metoda zmiany nazw schematów, jednak należy przy tym zachować ostrożność.
Metoda 2: MySQL ma bardzo dobrą funkcję do zmiany nazw tabel, która działa nawet w różnych schematach. Ta operacja zmiany nazwy ma charakter atomowy i nikt inny nie może uzyskać dostępu do tabeli podczas jej zmiany nazwy. Zajmuje to krótki czas, ponieważ zmiana nazwy tabeli lub jej schematu jest jedynie zmianą metadanych. Oto podejście proceduralne przy zmianie nazwy:
Utwórz nowy schemat bazy danych o żądanej nazwie. Zmień nazwy tabel ze starego schematu na nowy, używając komendy MySQL „RENAME TABLE”. Usuń stary schemat bazy danych.
If there are views, triggers, functions, stored procedures in the schema, those will need to be recreated too
. MySQL „RENAME TABLE” kończy się niepowodzeniem, jeśli w tabelach istnieją wyzwalacze. Aby temu zaradzić, możemy wykonać następujące czynności:1)
Dump the triggers, events and stored routines in a separate file.
Dokonano tego przy użyciu flag -E, -R (oprócz -t -d, który zrzuca wyzwalacze) do komendy mysqldump. Po zrzuceniu wyzwalaczy będziemy musieli usunąć je ze schematu, aby polecenie RENAME TABLE działało.2) Wygeneruj listę tylko tabel „BASE”. Można je znaleźć za pomocą zapytania w
information_schema.TABLES
tabeli.3) Zrzuć widoki do pliku wyjściowego. Widoki można znaleźć za pomocą zapytania w tej samej
information_schema.TABLES
tabeli.4) Upuść wyzwalacze na bieżących tabelach w old_schema.
5) Przywróć powyższe pliki zrzutu po zmianie nazwy wszystkich tabel „Podstawowych” znalezionych w kroku # 2.
Zawiłości z powyższymi metodami: może być konieczne zaktualizowanie GRANTS dla użytkowników, aby pasowali do poprawnej nazwy schematu. Można to naprawić prostą AKTUALIZACJĄ w tabelach mysql.columns_priv, mysql.procs_priv, mysql.tables_priv, mysql.db aktualizując nazwę old_schema do new_schema i wywołując „uprawnienia Flush;”. Chociaż „metoda 2” wydaje się nieco bardziej skomplikowana niż „metoda 1”, jest to całkowicie skryptowalne. Prosty skrypt bash do wykonania powyższych kroków we właściwej kolejności może pomóc zaoszczędzić miejsce i czas podczas następnej zmiany nazw schematów bazy danych.
Zespół Percona Remote DBA napisał skrypt o nazwie „rename_db”, który działa w następujący sposób:
Aby zademonstrować użycie tego skryptu, użyłem przykładowego schematu „emp”, utworzyłem wyzwalacze testowe, zapisałem procedury na tym schemacie. Spróbuje zmienić nazwę schematu bazy danych za pomocą skryptu, którego wypełnienie zajmuje kilka sekund, w przeciwieństwie do czasochłonnej metody zrzutu / przywracania.
Jak widać na powyższym wyjściu, schemat bazy danych „emp” został przemianowany na „emp_test” w mniej niż sekundę. Na koniec jest to skrypt z Percony, który został użyty powyżej dla „metody 2”.
źródło
Kroki :
źródło
Dla użytkowników komputerów Mac Sequel Pro ma opcję Zmień nazwę bazy danych w menu Baza danych. http://www.sequelpro.com/
źródło
Większość odpowiedzi tutaj jest błędnych z jednego z dwóch powodów:
Percona ma post na blogu o tym, jak zrobić to dobrze: https://www.percona.com/blog/2013/12/24/renaming-database-schema-mysql/
oraz skrypt opublikowany (wykonany?) przez Simona R Jonesa, który robi to, co sugeruje ten post. Naprawiłem błąd znaleziony w skrypcie. Możesz to zobaczyć tutaj:
https://gist.github.com/ryantm/76944318b0473ff25993ef2a7186213d
Oto jego kopia:
Zapisz go w pliku o nazwie
rename_db
i uczyń skrypt wykonalnym, achmod +x rename_db
następnie użyj go jak./rename_db localhost old_db new_db
źródło
Można zmienić nazwę wszystkich tabel w bazie danych, aby znajdowały się w innej bazie danych bez konieczności pełnego zrzutu i przywracania.
Jednak wszelkie wyzwalacze w docelowej bazie danych nie będą zadowolone. Najpierw musisz je upuścić, a następnie odtworzyć po zmianie nazwy.
źródło
mysql --batch-uroot -e "call mysql.rename_db('test', 'blah2');" | mysql -uroot
Uwaga, musisz użyć opcji --batch, aby zmienić formatowanie na formatowanie surowe, które wyświetla wyniki bez formatowania.Oto plik wsadowy, który napisałem, aby zautomatyzować go z wiersza poleceń, ale dla Windows / MS-DOS.
Składnia to nazwa_mysqldb bazy danych nowa baza danych -u [użytkownik] -p [hasło]
źródło
Procedura przechowywana TodoInTX nie do końca działała dla mnie. Oto moje pchnięcie nożem:
źródło
Najprostszą metodą jest użycie oprogramowania HeidiSQL. Jest darmowy i open source. Działa w systemie Windows i dowolnym systemie Linux z Wine (uruchamiaj aplikacje Windows w systemach Linux, BSD, Solaris i Mac OS X).
Aby pobrać HeidiSQL, goto http://www.heidisql.com/download.php .
Aby pobrać Wine, goto http://www.winehq.org/ .
Aby zmienić nazwę bazy danych w HeidiSQL, wystarczy kliknąć prawym przyciskiem myszy nazwę bazy danych i wybrać „Edytuj”. Następnie wprowadź nową nazwę i naciśnij „OK”.
To takie proste.
źródło
Database "database_name" contains stored routine(s) which cannot be moved.
Wyzwalacze (przynajmniej dla bazy danych MariDB) są liczone jako przechowywane procedury. Nie miałem żadnych procedur składowanych, ale nie mogłem zmienić nazwy bazy danych, dopóki nie usunąłem wszystkich wyzwalaczy.Dla użytkowników komputerów Mac możesz użyć
Sequel Pro
(darmowy), który po prostu zapewnia opcję zmiany nazw baz danych. Chociaż nie usuwa starej bazy danych.po otwarciu odpowiedniego DB wystarczy kliknąć:
Database
->Rename database...
źródło
I postawił pytanie na serwerze Fault próbują obejść przestoje podczas przywracania bardzo dużych baz danych MySQL za pomocą serwera proxy. Nie odniosłem żadnego sukcesu, ale w końcu zdałem sobie sprawę, że chciałem, aby funkcja ZMIEŃ NAZWĘ BAZY DANYCH, ponieważ zrzut / import nie był opcją ze względu na rozmiar naszej bazy danych.
W MySQL jest wbudowana funkcja RENAME TABLE, więc skończyło się na napisaniu prostego skryptu Python, który wykonałby za mnie zadanie. Ja napisałem go na GitHub w przypadku może to być przydatne dla innych.
źródło
RENAME TABLE
, że 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.Dla Twojej wygody poniżej znajduje się mały skrypt powłoki, który należy wykonać z dwoma parametrami: nazwa-db i nowa nazwa-db.
Może być konieczne dodanie parametrów logowania do linii mysql, jeśli nie używasz pliku .my.cnf w katalogu domowym. Wykonaj kopię zapasową przed uruchomieniem tego skryptu.
źródło
Wydaje się, że nikt o tym nie wspominał, ale oto inny sposób:
następnie dla każdej tabeli wykonaj:
to jeśli chcesz
Takie podejście miałoby tę zaletę, że wykonuje cały transfer na serwerze przy prawie zerowym ruchu sieciowym, więc pójdzie dużo szybciej niż zrzut / przywracanie.
Jeśli masz procedury składowane / widoki / itp., Możesz również chcieć je przenieść.
źródło
create database
zestawieniu? Skąd to masz?create table like
składni: dev.mysql.com/doc/refman/5.7/en/create-table-like.html . Jeśli chodzi o tworzenie baz danych, wydaje się, że MySQL porzucił tę klauzulę.Oto szybki sposób na wygenerowanie skryptu zmiany nazwy SQL, jeśli masz wiele tabel do przeniesienia.
źródło
ALTER DATABASE
jest proponowanym rozwiązaniem MySQL iRENAME DATABASE
jest porzucane.Od 13.1.32 RENAME DATABASE Składnia :
To oświadczenie zostało dodane w MySQL 5.1.7, ale okazało się, że jest niebezpieczne i zostało usunięte w MySQL 5.1.23.
źródło
alter database
zmiany nazwy samej bazy danych, a dokumentacja, z którą się łączysz, nie sugeruje, że jest to możliwe.W MySQL Administrator wykonaj następujące czynności:
źródło
w phpmyadmin możesz łatwo zmienić nazwę bazy danych
poprosić o usunięcie starej tabeli i ponowne załadowanie danych tabeli kliknij OK w obu
Twoja baza danych zostanie zmieniona
źródło
Jeśli używasz phpMyAdmin , możesz przejść do zakładki „operacje” po wybraniu bazy danych, której nazwę chcesz zmienić. Następnie przejdź do ostatniej sekcji „skopiuj bazę danych do” (lub coś w tym rodzaju), podaj nazwę i wybierz opcje poniżej. W tym przypadku myślę, że musisz zaznaczyć pola wyboru „struktura i dane” i „utwórz bazę danych przed skopiowaniem”, a na koniec naciśnij przycisk „idź” w tej sekcji.
Nawiasem mówiąc, używam phpMyAdmin w języku hiszpańskim, więc nie jestem pewien, jakie są nazwy sekcji w języku angielskim.
źródło