mysqldump转储完整模式所需的最小GRANT?(TRIGGER缺失!!)

Emi*_*lás 75 mysql database mysqldump grant database-backups

我有一个名为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'@'%'
Run Code Online (Sandbox Code Playgroud)

我想使用dump用户转储所有数据(包含的触发器和过程).我用以下方式调用mysqldump:

mysqldump -u dump -p --routines --triggers --quote-names --opt \
    --add-drop-database --databases myschema > myschema.sql
Run Code Online (Sandbox Code Playgroud)

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

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

mysqldump -u root -p --routines --triggers --quote-names --opt \
    --add-drop-database --databases myschema > myschema.sql
Run Code Online (Sandbox Code Playgroud)

所以,我想这是一个perms问题... 我的转储 MySQL用户正确执行完全转储所需额外资金多少?

Jan*_*nes 104

假设完全转储你也意味着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'@'%';
Run Code Online (Sandbox Code Playgroud)

如果你有VIEW执行函数的s,那么很遗憾你也需要EXECUTE.

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

  • 对于5.5及更高版本,您实际上不需要TRIGGER特权即可转储触发器代码。 (2认同)
  • 关于@0xC0000022L的评论,锁定表或不锁定表对于mysqldump来说是可选的,具体取决于您的mysqldump参数(相关参数是`--opt`,`--lock-tables`,`--lock-all-tables`,`-- single-transaction` 和相应的 `--skip-*` 变体。 (2认同)

Emi*_*lás 8

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

  GRANT TRIGGER ON `myschema`.* TO 'dump'@'%'
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我使用5.5,我实际上需要它 (5认同)
  • 这个名字实际上是TRIGGER,而不是TRIGGERS (3认同)