Mam użytkownika MySQL o nazwie dump z następującymi uprawnieniami:
GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%'
GRANT SELECT, LOCK TABLES ON `myschema`.* TO 'dump'@'%'
Chcę zrzucić wszystkie dane (w tym wyzwalacze i procedury) za pomocą użytkownika zrzutu . Wywołuję mysqldump w następujący sposób:
mysqldump -u dump -p --routines --triggers --quote-names --opt \
--add-drop-database --databases myschema > myschema.sql
Wszystko jest w porządku z zrzuconym plikiem z wyjątkiem wyzwalaczy, brakuje ich !!
Wyzwalacze są zrzucane poprawnie, jeśli spróbuję mysqldump z użytkownikiem root MySQL:
mysqldump -u root -p --routines --triggers --quote-names --opt \
--add-drop-database --databases myschema > myschema.sql
Więc wydaje mi się, że jest to problem z uprawnieniami ... jakie dodatkowe uprawnienia potrzebuje użytkownik MySQL dla mojego zrzutu, aby poprawnie wykonać pełny zrzut?
LOCK TABLES
w bazie danych próbuję się zrzucić ... używając5.5.49-MariaDB
--opt
,--lock-tables
,--lock-all-tables
,--single-transaction
i poszczególne--skip-*
warianty.Znalazłem dodatkową dotację, której potrzebowałem !!
GRANT TRIGGER ON `myschema`.* TO 'dump'@'%'
Tutaj masz odniesienie do oficjalnego dokumentu: http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger
źródło
TRIGGER
uprawnień do zrzucenia kodu wyzwalacza.Odkryłem, że czasami, jeśli użytkownik VIEW DEFINER nie istnieje, zrzut się nie powiedzie.
Zmień to, jak tam opisano
źródło
person
zamiastperson@localhost
. Dzięki!Oprócz Jannes odpowiedź, przy użyciu mysqldump z --tab opcji (produkuje plik tekstowy kartę rozdzielone dla każdej tabeli dumpingowych), twój użytkownik MySQL musi być udzielone na
FILE
przywilej, a także:GRANT FILE ON *.* TO 'dump'@'%';
Odniesienie do oficjalnej dokumentacji: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_tab
Wspomniane w tej sekcji:
źródło