Как мне создать пользователя 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стол? В чем дело?

Редактировать:

ГАХ и теперь это работает. Возможно, я раньше не запускал FLUSH PRIVILEGES.

Кроме того, как часто это происходит автоматически?

Редактировать:

Нет, это не работает. Запуск mysqldump -u username -p --all-databases > dump.sqlвручную не генерирует ошибку, но не выводит информационную_схему. automysqlbackupдействительно вызывает ошибку.


К сожалению ... со страницы руководства для mysqldump: mysqldump не создает дамп базы данных INFORMATION_SCHEMA. Если вы в явном виде называете эту базу данных в командной строке, mysqldump молча игнорирует ее. Кажется, что либо страница руководства устарела (и она выдает предупреждение), либо automysqlbackupвыполняет некоторые дополнительные проверки для дампа information_schema. Не уверен, что это, но это не связано с грантами пользователей.
Stickmangumby

1
Это не вопрос GRANT. Вам не нужно делать резервную копию INFORMATION_SCHEMA (см .: dev.mysql.com/doc/refman/5.0/en/information-schema.html )
SmallClanger,

1
В дополнение к тому, что сказал SmallClanger, INFORMATION_SCHEMA - это виртуальная база данных, перестраиваемая каждый раз при перезапуске MySQL, поэтому нет смысла делать резервные копии, потому что вы все равно не сможете восстановить ее.
Джон Гарденье

Ответы:


4

Эти разрешения должны быть все, что нужно для mysqldump.

Так как вы предоставили LOCK TABLES, и это вызывает ошибку в LOCK TABLES, кажется, что разрешения не согласованы. Вы управляете FLUSH PRIVILEGES?


1

Упс ... со страницы руководства для 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 сценария.


Это не вопрос GRANT. Вам не нужно делать резервную копию INFORMATION_SCHEMA (см .: dev.mysql.com/doc/refman/5.0/en/information-schema.html )
SmallClanger,

В дополнение к тому, что сказал SmallClanger, INFORMATION_SCHEMA - это виртуальная база данных, перестраиваемая каждый раз при перезапуске MySQL, поэтому нет смысла делать резервные копии, потому что вы все равно не сможете восстановить ее.
Джон Гарденье

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.