Как мне создать пользователя MySQL только для чтения для целей резервного копирования с помощью mysqldump?

Я использую 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 действительно вызывает ошибку.

2 ответа

Решение

Ой... из справочной страницы для 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 сценария.

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

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

Создать пользователя

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 {} \;
Другие вопросы по тегам