Минимальные GRANT, необходимые mysqldump для выгрузки полной схемы? (Триггеры отсутствуют !!) - PullRequest
70 голосов
/ 28 декабря 2011

У меня есть пользователь MySQL с именем dump со следующими привилегиями:

GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%'
GRANT SELECT, LOCK TABLES ON `myschema`.* TO 'dump'@'%'

Я хочу вывести все данные (включая триггеры и процедуры), используя dump пользователь.Я вызываю mysqldump следующим образом:

mysqldump -u dump -p --routines --triggers --quote-names --opt \
    --add-drop-database --databases myschema > myschema.sql

С дамп-файлом все в порядке, кроме триггеров , они отсутствуют !!

Триггеры сброшеныправильно, если я попробую mysqldump с root MySQL user:

mysqldump -u root -p --routines --triggers --quote-names --opt \
    --add-drop-database --databases myschema > myschema.sql

Итак, я предполагаю, что это проблема с пермиссией ... какие дополнительные дают мой дамп Пользователю MySQL нужно правильно делать полный дамп?

Ответы [ 4 ]

100 голосов
/ 21 августа 2013

Предполагая, что под полным дампом вы также подразумеваете VIEW s и EVENT s, вам потребуется:

GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...;
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `myschema`.* TO 'dump'@'%';

, а если у вас есть VIEW s, которые выполняют функцию, то, к сожалению,вам также нужно EXECUTE.

Моя собственная проблема: зачем мне SELECT, если я хочу создать дамп без данных?

8 голосов
/ 29 декабря 2011

Я нашел дополнительный GRANT, который мне был нужен !!

  GRANT TRIGGER ON `myschema`.* TO 'dump'@'%'

Здесь у вас есть ссылка на официальном документе: http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger

Привилегия TRIGGER разрешает операции триггера.Вы должны иметь эту привилегию для таблицы, чтобы создавать, удалять или выполнять триггеры для этой таблицы.

1 голос
/ 06 июля 2016

Я обнаружил, что иногда, если пользователь VIEW DEFINER не существует, сбой дампа.

Измените его, как описано там

0 голосов
/ 07 февраля 2019

В дополнение к ответу Jannes , при использовании mysqldump с опцией - tab (создает текстовый файл с разделителями табуляции для каждой дампированной таблицы), ваш пользователь MySQL должен также предоставляется привилегия FILE:

GRANT FILE ON *.* TO 'dump'@'%';

Официальная ссылка на документацию: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_tab

Упоминается в этом разделе:

ЭтоЭта опция должна использоваться, только если mysqldump запущен на той же машине, что и сервер mysqld.Поскольку сервер создает файлы * .txt в указанном вами каталоге, этот сервер должен быть доступен для записи на сервере, а используемая учетная запись MySQL должна иметь привилегию FILE.Поскольку mysqldump создает * .sql в том же каталоге, он должен быть доступен для записи вашей учетной записи входа в систему.

...