Próbuję skopiować moją bazę danych mysql z Amazon EC2 do RDS:
Pomyślnie wprowadziłem mysqldump
moją bazę danych do folderu głównego, używając tego:
root@ip-xx-xx-xx-xx:~# mysqldump my_database -u my_username -p > my_database.sql
Następnie próbowałem przenieść ten plik .sql do mojej nowej bazy danych RDS:
root@ip-xx-xx-xx-xx:~# mysql my_database -u my_username -p -h
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql
Niestety otrzymuję następujący komunikat o błędzie:
You do not have the SUPER privilege and binary logging is enabled
(you *might* want to use the less safe log_bin_trust_function_creators variable)
Próbowałem na GRANT SUPER..
różne sposoby, ale otrzymuję błędy, gdy próbuję to zrobić. Pisanie mysql > FLUSH privileges;
też nie działa.
Jestem początkującym mysql, przepraszam za tak łatwe pytanie. Myśli?
mysql
amazon-ec2
amazon-web-services
amazon-rds
grant
Tim Peterson
źródło
źródło
GRANT SUPER
w RDS. RDS nie daje możliwości uzyskania SUPER uprawnień.sql
plik zawieraCREATE FUNCTION
instrukcję, która wymaga uprzywilejowanego użytkownika. zobacz toOdpowiedzi:
Na http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ , musisz ustawić
log_bin_trust_function_creators
na 1 w konsoli AWS , aby załadować plik zrzutu bez błędów.Jeśli chcesz zignorować te błędy i załadować resztę pliku zrzutu, możesz skorzystać z
-f
opcji:-f
Będzie raportować błędy, ale będzie kontynuować przetwarzanie pozostałą część pliku zrzutu.źródło
-f
nie pomogło. Mam ten sam błąd. Używając twojego linku, mam problem ze składnią narzędzi RDS Cli. To znaczy, kiedy idę zmienić uprawnienia, pojawia się następujący błąd:rds-modify-db-parameter-group: Malformed input-Unrecognized option: -–parameters=name=log_bin_trust_function_creators, Usage: rds-modify-db-parameter-group DBParameterGroupName --parameters "name=value, value=value, method=value" [ --parameters "name=value, value=value, method=value" ...] [General Options]
./rds-modify-db-parameter-group mygroup -–parameters "name=log_bin_trust_function_creators, value=on, method=immediate" –I="accesskeyxxxxxx" –S="secretkeyxxxxxxxx"
wiem, że musi to być problem z cudzysłowem lub podwójnym myślnikiem, ale żadna z tych zmian do tej pory nie działa, ugh!-f
opcja nie usunie błędów, po prostu pozwoli na przetworzenie nieszkodliwych instrukcji SQL w pliku. Z tego, co przeczytałem, RDS dławi się procedurami składowanymi w pliku zrzutu. Spróbuj utworzyć plik zrzutu bez procedur przechowywania i sprawdź, czy ładuje się dobrze:mysqldump --routines=0 --triggers=0 --events=0 my_database -u my_username -p
-f
opcji. Druga faza może polegać na oddzielnym zrzucaniu tylko procedur / proc stred itp.źródło
Problem z wyzwalaczami i procedurami składowanymi w pliku zrzutu polega na tym, że te definicje obejmują użytkownika, który powinien utworzyć procedurę składowaną, czyli DEFINER. Użytkownik najprawdopodobniej nie istnieje w RDS, więc wtedy zgłaszany jest błąd. Aby móc załadować plik zrzutu, można usunąć DEFINER za pomocą seda lub Perla i utworzyć procedurę składowaną / wyzwalacz z użytkownikiem wykonującym import.
Teraz powinieneś móc załadować naprawiony plik zrzutu
Jak wspomniano we wcześniejszej odpowiedzi, powinieneś ustawić parametr DB:
źródło
OldDefiner
@localhost
/ DEFINER =NewDefiner
@localhost
/ g' ./TargetSqlFile.sqlDla mnie w moim pliku zrzutu były tylko 2 polecenia, które wymagały uprawnień SUPER:
SET @@GLOBAL.gtid_purged
SET @@SESSION.SQL_LOG_BIN
Zgodnie z dokumentacją mysqldump możesz je wyłączyć za pomocą
--set-gtid-purged=OFF
.Następnie patrząc na man mysqldump :
Dlatego zdecydowałem się dodać
--set-gtid-purged=OFF
do mojegomysqldump
polecenia, a następnie mogłem pomyślnie zaimportować wynikowy plik zrzutu.źródło
Zgodnie z definicją w dokumentacji AWS wyzwalacze, procedury i funkcje są domyślnie wyłączone, ponieważ rejestrowanie binarne jest domyślnie włączone. Wyłączenie w zasadzie sprawia, że twoja baza danych jest bezpieczniejsza, ale jeśli dobrze zabezpieczono ją przez sieć, nie ma to znaczenia.
Wykonaj poniższe czynności, a problem zostanie rozwiązany https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/
Nie powinieneś także używać definicji podczas tworzenia procedur. Proste polecenie sed może je usunąć.
źródło
Oprócz edycji
musisz usunąć wszystkie DEFINER z pliku zrzutu, sprawdź poniższy link dla SED polecenia które może pomóc w wyczyszczeniu pliku zrzutu sql.
https://www.percona.com/blog/2014/07/02/using-mysql-triggers-and-views-in-amazon-rds/#comment-10968243
źródło
Po zastosowaniu odpowiedzi arun-r, jeśli problem nie został rozwiązany, musisz zmodyfikować plik zrzutu. To jest proste.
W pliku zrzutu znajdziesz linie takie jak:
Musisz wymienić:
username_from_dumped_database
przez twoją nazwę użytkownika w bazie danych rds.host_from_dumped_databse
przez%
Nie wiem dlaczego, ale ta sztuczka zadziałała na mnie. Do tego wystarczy prosty edytor tekstu.
źródło