Как мне создать пользователя 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 {} \;