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

У меня есть пользователь 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 с пользователем MySQL root:

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

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


person Emilio Nicolás    schedule 28.12.2011    source источник


Ответы (4)


Предполагая, что под полным дампом вы также имеете в виду 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'@'%';

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

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

person Jannes    schedule 21.08.2013
comment
Для версии 5.5 и выше вам фактически не нужна привилегия TRIGGER для сброса кода триггера. - person bluecollarcoder; 18.12.2013
comment
Я использую 5.5 и мне нужна привилегия TRIGGER для сброса кода триггера. - person heuri; 21.07.2014
comment
В моем случае, похоже, мне также нужно LOCK TABLES в базе данных, которую я пытаюсь сбросить ... используя 5.5.49-MariaDB - person 0xC0000022L; 15.09.2016
comment
Что касается комментария @ 0xC0000022L, блокировка таблиц не является обязательной для mysqldump, в зависимости от ваших параметров mysqldump (соответствующими параметрами являются --opt, --lock-tables, --lock-all-tables, --single-transaction и соответствующие --skip-* варианты. - person Torque; 20.08.2019

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

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

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

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

person Emilio Nicolás    schedule 29.12.2011
comment
Имя на самом деле TRIGGER, а не TRIGGERS - person thenickdude; 06.07.2012
comment
Хотя это может быть ответом на проблему автора, это не дает ответа на вопрос: каковы минимальные требования GRANT для выполнения полного дампа. Во-первых: отсутствуют EVENT и SHOW VIEW. - person Jannes; 21.08.2013
comment
Для 5.5 и выше вам фактически не нужна TRIGGER привилегия для сброса кода триггера. - person bluecollarcoder; 18.12.2013
comment
Я использую 5.5 и мне это действительно нужно - person Emilio Nicolás; 07.01.2014

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

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

person BaZZiliO    schedule 06.07.2016
comment
Не уверен, почему это было отклонено, моя проблема решена. Я указал определитель как person вместо person@localhost. Спасибо! - person stianlik; 12.08.2017

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

person Rotem Ad    schedule 07.02.2019