Мінімум ГРАНТІВ, необхідних mysqldump для скидання повної схеми? (ТРИГГЕРИ відсутні!)


79

У мене є користувач MySQL, який називається дамп, із такими завивками:

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 з кореневим користувачем 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 для повного злиття". Для одного: відсутні події та ПОКАЗАТИ ПЕРЕГЛЯД.
Яннес

Для версії 5.5 та вище вам фактично не потрібні TRIGGERпривілеї для скидання коду запуску.
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.