85

我有一个名为dump的 MySQL 用户,具有以下权限:

GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%'
GRANT SELECT, LOCK TABLES ON `myschema`.* TO 'dump'@'%'

我想使用转储用户转储所有数据(包括触发器和过程)。我通过以下方式调用 mysqldump:

mysqldump -u dump -p --routines --triggers --quote-names --opt \
    --add-drop-database --databases myschema > myschema.sql

除了触发器之外,转储文件一切正常,它们丢失了!!

如果我使用root MySQL 用户尝试 mysqldump,触发器将被正确转储:

mysqldump -u root -p --routines --triggers --quote-names --opt \
    --add-drop-database --databases myschema > myschema.sql

所以,我想这是一个烫发问题......我的转储MySQL 用户需要哪些额外授权才能正确执行完整转储?

4

4 回答 4

116

假设通过完全转储您还意味着VIEWs 和EVENTs,您将需要:

GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...;
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `myschema`.* TO 'dump'@'%';

如果您有VIEW执行功能的 s,那么不幸的是您还需要EXECUTE.

SELECT我自己的问题是:如果我只想进行无数据转储,为什么还需要?

于 2013-08-21T08:22:51.137 回答
8

我找到了我需要的额外 GRANT!

  GRANT TRIGGER ON `myschema`.* TO 'dump'@'%'

这里有官方文档的参考:http: //dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger

TRIGGER 权限启用触发器操作。您必须拥有此表的权限才能为该表创建、删除或执行触发器。

于 2011-12-29T12:15:57.283 回答
1

除了Jannes 的回答之外,当使用带有--tab选项的 mysqldump 时(为每个转储表生成一个制表符分隔的文本文件),您的 MySQL 用户也必须被授予特权FILE

GRANT FILE ON *.* TO 'dump'@'%';

官方文档参考:https ://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_tab

本节提到:

仅当 mysqldump 与 mysqld 服务器在同一台机器上运行时,才应使用此选项。因为服务器在您指定的目录中创建 *.txt 文件,所以该目录必须是服务器可写的,并且您使用的 MySQL 帐户必须具有 FILE 权限。因为 mysqldump 在同一目录下创建 *.sql,所以它必须是您的系统登录帐户可写的。

于 2019-02-07T15:56:25.500 回答
1

我发现,有时如果 VIEW DEFINER 用户不存在,转储会失败。

更改它,如那里所述

于 2016-07-06T08:06:58.757 回答