我有一个名为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用户正确完成完整转储所需的额外拨款是什么?

最佳答案

假设完全转储还意味着VIEWEVENT,则需要:

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

10-06 04:15
查看更多