mysqldump转储完整模式所需的最低授权量?(触发器不见了!)


79

我有一个名为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用户正确执行完整转储所需额外补助是什么?

Answers:


111

假设完全转储还意味着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执行函数的,那么不幸的是,您还需要EXECUTE

我自己的问题是:为什么我SELECT只想进行无数据转储?


2
对于5.5及更高版本,您实际上不需要TRIGGER特权即可转储触发器代码。
bluecollarcoder 2013年

1
我正在使用5.5,并且需要TRIGGER特权才能转储触发代码。
heuri 2014年

就我而言,我也需要LOCK TABLES在数据库中尝试将其自身转储...使用5.5.49-MariaDB
0xC0000022L

1
关于@ 0xC0000022L的评论,锁定表和未是可选的mysqldump的,这取决于你的mysqldump参数(相关参数--opt--lock-tables--lock-all-tables--single-transaction和各自的--skip-*变种。
扭矩

8

我找到了我需要的额外赠品!!

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

在这里,您可以参考官方文档:http : //dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger

TRIGGER特权启用触发器操作。您必须具有此特权才能使表创建,删除或执行该表的触发器。


3
名称实际上是触发器,而不是触发器
thenickdude 2012年

即使这可以解决作者的问题,也不能回答以下问题:“完全转储的最低GRANT要求是什么”。例如:缺少“事件”和“显示视图”。
Jannes

对于5.5及更高版本,您实际上不需要TRIGGER特权来转储触发器代码。
bluecollarcoder 2013年

5
我使用5.5,而我实际上需要它
EmilioNicolás2014年

1

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

改变它,描述


不确定为什么不赞成,解决了我的问题。我已将定义器指定为,person 而不是person@localhost。谢谢!
stianlik

1

除了雅尼的答案,使用mysqldump用时--tab选项(产生一个制表符分隔文本文件,每个转储的表),您的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,因此它必须可由您的系统登录帐户写入。

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.