Я использую 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 {} \;