Як створити користувача MySQL лише для читання для цілей резервного копіювання за допомогою mysqldump?


14

Я використовую automysqlbackupскрипт, щоб скинути свої бази даних mysql, але я хочу, щоб це було користувачеві, доступним лише для читання, щоб я не зберігав пароль кореневої бази даних у файлі простого тексту.

Я створив такого користувача:

grant select, lock tables on *.* to 'username'@'localhost' identified by 'password';

Коли я бігаю mysqldump(або через, automysqlbackupабо безпосередньо), отримую таке попередження:

mysqldump: Got error: 1044: Access denied for user 'username'@'localhost' to database 'information_schema' when using LOCK TABLES

Чи я це роблю неправильно? Чи потрібні додаткові гранти для мого користувача, що читає лише? Або можна лише rootзаблокувати information_schemaстіл? Що відбувається?

Редагувати:

GAH і зараз це працює. Я, можливо, раніше не працював з ПРИБІГАМИ ПРИМІТКИ.

Як осторонь, як часто це відбувається автоматично?

Редагувати:

Ні, це не працює. Запуск mysqldump -u username -p --all-databases > dump.sqlвручну не створює помилки, але не скидає інформацію_schema. automysqlbackupробить помилку.


На жаль, зі сторінки man для mysqldump: mysqldump не скидає базу даних INFORMATION_SCHEMA. Якщо ви чітко називаєте цю базу даних у командному рядку, mysqldump мовчки ігнорує її. Здається, що або довідкова сторінка застаріла (і вона викликає попередження), або automysqlbackupвиконує деякі додаткові перевірки на дамп information_schema. Не впевнений, що це, але це не пов’язано з грантами користувачів.
stickmangumby

1
Це не ГРАНТ. Вам не потрібно робити резервну копію INFORMATION_SCHEMA (Див.: Dev.mysql.com/doc/refman/5.0/uk/information-schema.html )
SmallClanger

1
Щоб додати те, що сказав SmallClanger, INFORMATION_SCHEMA - це віртуальна база даних, що переробляється щоразу, коли MySQL перезапускається, тому немає сенсу створювати резервні копії, оскільки ви не можете її відновити.
John Gardeniers

Відповіді:


4

Ці дозволи повинні бути всіма необхідними для mysqldump.

Оскільки ви надали LOCK TABLES і помиляєтесь на LOCK TABLES, схоже, дозволи не суперечать. Ви запустили FLUSH PRIVILEGES?


1

На жаль ... зі сторінки "man" для mysqldump:

mysqldump does not dump the INFORMATION_SCHEMA database. If you name that database explicitly on the command line, mysqldump silently ignores it

Здається, що або довідкова сторінка застаріла (і вона викликає попередження), або automysqlbackupвиконує деякі додаткові перевірки на дамп information_schema.

Не впевнений, що це, але це не пов’язано з грантами користувачів.

Редагувати

Так, це помилка у automysqlbackupверсії 2.5.1 (використовуючи MySQL 5.1.41 під Ubuntu 10.04) - вона намагається створити резервну копію, information_schemaколи не повинна.

Виправлення: додайте information_schemaдо DBEXCLUDEрядка 76 сценарію.


Це не ГРАНТ. Вам не потрібно робити резервну копію INFORMATION_SCHEMA (Див.: Dev.mysql.com/doc/refman/5.0/uk/information-schema.html )
SmallClanger

Щоб додати те, що сказав SmallClanger, INFORMATION_SCHEMA - це віртуальна база даних, що переробляється щоразу, коли MySQL перезапускається, тому немає сенсу створювати резервні копії, оскільки ви не можете її відновити.
John Gardeniers

0

Створити користувача

GRANT USAGE ON *.* TO 'dump'@'localhost' IDENTIFIED BY 'plaintext-pass';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `my-db`.* TO 'dump'@'localhost';

Перевірте пільги

mysql> SHOW GRANTS FOR dump@'localhost';
+-----------------------------------------------------------------------------------------------+
| Grants for dump@localhost                                                                     |
+-----------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'dump'@'localhost'                                                      |
| GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `my-db`.* TO 'dump'@'localhost' |
+-----------------------------------------------------------------------------------------------+

Використовуйте свій улюблений редактор для створення файлу за ~/.my.cnfдопомогоюchmod 400

[client]
user=dump
password=plaintext-pass

Створіть папку для скидів, як приклад

mkdir ~/db-dumps

Перевірте, чи працює

mysqldump -u dump --hex-blob --routines --triggers my-db | gzip > ~/db-dumps/manual-my-db-dump-`date +%F`.sql.gz

За бажанням ви можете робити смітники, dailyа weeklyпотім видаляти всі dailyстарші за місяць

#m h  dom mon dow   command
0  3  *   *   0,2-6 /usr/bin/mysqldump -u dump --hex-blob --routines --triggers my-db | gzip > ~/db-dumps/daily-my-db-dump-`date +%F`.sql.gz;
0  3  *   *   1     /usr/bin/mysqldump -u dump --hex-blob --routines --triggers my-db | gzip > ~/db-dumps/weekly-my-db-dump-`date +%F`.sql.gz;
0  4  *   *   *     /usr/bin/find ~/db-dumps/ -name "daily-*" -type f -mtime +30 -exec rm -f {} \;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.