如何使用mysqldump创建只读MySQL用户以进行备份?


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桌子?这是怎么回事?

编辑:

GAH,现在可以使用了。我以前可能没有运行过FLUSH PRIVILEGES。

顺便说一句,这种情况多久自动发生一次?

编辑:

不,它不起作用。mysqldump -u username -p --all-databases > dump.sql手动运行不会产生错误,但不会转储information_schema。automysqlbackup确实会引发错误。


糟糕,...的手册页上mysqldump:mysqldump不会转储INFORMATION_SCHEMA数据库。如果您在命令行上显式命名该数据库,则mysqldump会静默忽略它,似乎手册页已过期(确实会发出警告),或者automysqlbackup正在对dump进行一些其他检查information_schema。不确定是哪个,但与用户授权无关。
stickmangumby

1
这不是问题。您不需要备份INFORMATION_SCHEMA(请参阅:dev.mysql.com/doc/refman/5.0/en/information-schema.html
SmallClanger

1
补充一下SmallClanger所说的,INFORMATION_SCHEMA是一个虚拟数据库,每次重新启动MySQL时都会重新构建,因此没有必要备份它,因为无论如何您都无法还原它。
John Gardeniers

Answers:


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

不确定是哪个,但与用户授权无关。

编辑

是的,这是automysqlbackup2.5.1版中的错误(在Ubuntu 10.04下使用MySQL 5.1.41)-它会information_schema在不应该的时候尝试备份。

FIX:添加information_schemaDBEXCLUDE脚本的第76行。


这不是问题。您不需要备份INFORMATION_SCHEMA(请参阅:dev.mysql.com/doc/refman/5.0/en/information-schema.html
SmallClanger

补充一下SmallClanger所说的,INFORMATION_SCHEMA是一个虚拟数据库,每次重新启动MySQL时都会重新构建,因此没有必要备份它,因为无论如何您都无法还原它。
John Gardeniers

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.cnfchmod 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

(可选)您可以进行转储dailyweekly然后删除所有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 {} \;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.