Wiem, jak eksportować / importować bazy danych przy użyciu mysqldump i to dobrze, ale jak uzyskać uprawnienia na nowym serwerze.
Aby uzyskać dodatkowe punkty, istnieje już kilka istniejących baz danych na nowym, jak zaimportować stare uprawnienia do serwerów bez konieczności eliminowania kilku istniejących.
Stary serwer: 5.0.67-społeczność
Nowy serwer: 5.0.51a-24 + lenny1
EDYCJA: Mam zrzut db 'mysql' ze Starego Serwera i teraz chcę poznać właściwy sposób połączenia z db 'mysql' na Nowym Serwerze.
Próbowałem prostego „importowania” przy użyciu phpMyAdmin i zakończyłem się błędem dotyczącym duplikatu (takiego, który już migrowałem ręcznie).
Czy ktoś ma elegancki sposób na połączenie dwóch baz danych „mysql”?
Odpowiedzi:
Nie zadzieraj z db mysql. Tam dzieje się o wiele więcej niż tylko tabela użytkowników. Najlepszym rozwiązaniem jest polecenie „ POKAŻ DOTACJE ”. Mam wiele aliasów i funkcji konserwacyjnych CLI w moim .bashrc (właściwie moje .bash_aliases, które pozyskuję w moim .bashrc). Ta funkcja:
Pierwsza komenda mysql używa SQL do generowania poprawnego SQL, który jest przesyłany potokowo do drugiej komendy mysql. Dane wyjściowe są następnie przesyłane strumieniowo przez sed, aby dodać ładne komentarze.
$ @ W poleceniu pozwoli ci nazywać go jako: mygrants --host = prod-db1 --user = admin --password = secret
Możesz użyć pełnego zestawu narzędzi unixowych w następujący sposób:
To jest właściwy sposób na przenoszenie użytkowników. Twoja lista ACL MySQL jest modyfikowana czystym SQL.
źródło
user
tabeli użytkownika z hostem%
, ale następnie wdb
tabeli masz wpisy, w którychhost
jest wyraźna wartość, te wpisy wdb
tabeli nie są pobierane przy użyciu tej metody.-r
do drugiej komendy mysql w funkcji, a podwójne znaki specjalne nie będą generowane przezmysql
. np .:mysql -r $@
Istnieją dwie metody wyodrębniania Grants SQL z wystąpienia MySQL
METODA nr 1
Możesz skorzystać z pt-show- grants z Percona Toolkit
SPOSÓB 2
Możesz emulować
pt-show-grants
w następujący sposóbKażda z metod wygeneruje czysty zrzut SQL dotacji MySQL. Pozostaje tylko wykonać skrypt na nowym serwerze:
Spróbuj !!!
źródło
Odpowiedź Richarda Bronoskiego była dla mnie niezwykle przydatna. Wielkie dzięki!!!
Oto mała odmiana, która była dla mnie przydatna. Jest to przydatne do przenoszenia użytkowników np. Między dwiema instalacjami Ubuntu z uruchomionym phpmyadmin. Po prostu zrzuć uprawnienia dla wszystkich użytkowników oprócz root, phpmyadmin i debian-sys-maint. Kod jest wtedy
źródło
grep rails_admin
wywnioskować, jak to zrobić, nie tworząc specjalnej funkcji dla każdego przypadku krawędzi. Użyj opcji „odwracania”mygrants --host=prod-db1 --user=admin --password=secret | grep -Ev 'root|phpmyadmin|debian-sys-maint' | mysql --host=staging-db1 --user=admin --password=secret
Lub użyj percona-toolkit (dawniej maatkit) i użyj
pt-show-grants
(lubmk-show-grants
) do tego celu. Nie potrzeba uciążliwych skryptów i / lub procedur przechowywanych.źródło
Możesz wykonać mysqldump bazę danych „mysql” i zaimportować ją do nowej; wymagane będą flush_privileges lub restart i na pewno będziesz chciał najpierw wykonać kopię zapasową istniejącej bazy danych mysq.
Aby uniknąć usuwania istniejących uprawnień, pamiętaj o dodawaniu wierszy w tabelach uprawnień (db, column_priv, host, func itp.).
źródło
Możesz to również zrobić jako procedurę przechowywaną:
i zadzwoń za pomocą
następnie potokuj dane wyjściowe za pomocą polecenia Richards sed, aby uzyskać kopię zapasową uprawnień.
źródło
Chociaż wydaje się, że @Richard Bronosky jest poprawną odpowiedzią, natknąłem się na to pytanie po próbie migracji zestawu baz danych z jednego serwera na drugi, a rozwiązanie było znacznie prostsze:
W tym momencie wszystkie moje dane były widoczne, gdy się zalogowałem
root
, ponieważmysql.user
tabela zawierała wszystko, czego się spodziewałem, ale nie mogłem zalogować się jako żaden inny użytkownik i znalazłem to pytanie, zakładając, że muszę ponownie wystawićGRANT
oświadczenia.Okazuje się jednak, że serwer mysql po prostu musiał zostać zrestartowany, aby zaktualizowane uprawnienia w
mysql.*
tabelach zaczęły obowiązywać:Mam nadzieję, że pomoże to komuś innemu osiągnąć to, co powinno być prostym zadaniem!
źródło
Co powiesz na skrypt PHP? :)
Zobacz źródło tego skryptu, a będziesz mieć wszystkie wymienione uprawnienia:
źródło
utwórz plik skryptu powłoki z następującym kodem:
################################################################################### 3 #**** następnie uruchom go w powłoce w ten sposób: zostaniesz poproszony o podanie hasła roota dwa razy, a następnie GRANTS SQL zostanie wyświetlony na ekranie. ****
źródło
One-liner robi prawie to samo, co niesamowite
pt-show-grants
:Oparty tylko na narzędziach unixowych, nie jest potrzebne dodatkowe oprogramowanie.
Wykonaj z poziomu powłoki bash, zakładając, że masz działający system, w
.my.cnf
którymmysql root
można odczytać hasło użytkownika.źródło