Назад | Перейти на главную страницу

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

Я использую automysqlbackup script для сброса моих баз данных 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 стол? В чем дело?

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

ГАХ и теперь все работает. Возможно, я раньше не запускал ПРИВИЛЕГИИ ПРОМЫВКИ.

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

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

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

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

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

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