Минимальные GRANT, необходимые mysqldump для сброса полной схемы? (ТРИГГЕРЫ отсутствуют !!)


79

У меня есть пользователь 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'@'%'

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

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

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

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

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

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

Ответы:


111

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

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'@'%';

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

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


2
Для 5.5 и выше вам действительно не нужна привилегия TRIGGER для сброса кода триггера.
bluecollarcoder

1
Я использую 5.5 и мне нужна привилегия TRIGGER для сброса кода триггера.
heuri

В моем случае, похоже, мне также нужна LOCK TABLESбаза данных, которую я пытаюсь сбросить ... используя5.5.49-MariaDB
0xC0000022L

1
Что касается @ комментария 0xC0000022L, в замке таблицы или не является обязательным для туздЫшпра, в зависимости от параметров MySQLDump (соответствующие параметры --opt, --lock-tables, --lock-all-tables, --single-transactionи соответствующие --skip-*варианты.
Крутящий момент

8

Я нашел дополнительный ГРАНТ, в котором я нуждался !!

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

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

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


3
Имя на самом деле TRIGGER, а не
TRIGGERS

Хотя это может быть ответом на проблему автора, он не отвечает на вопрос: «каковы минимальные требования GRANT для выполнения полного дампа». Во-первых: EVENT и SHOW VIEW отсутствуют.
Jannes

Для TRIGGERверсии 5.5 и выше вам фактически не нужны права для сброса кода триггера.
bluecollarcoder

5
Я использую 5.5, и мне это действительно было нужно
Эмилио Николас

1

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

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


Не уверен, почему это было отклонено, моя проблема решена. Я указал определитель как person вместо person@localhost. Благодаря!
stianlik

1

В дополнении к Jannes ответа, при использовании туздЫшпра с --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 в том же каталоге, он должен быть доступен для записи вашей системной учетной записи.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.