我有一个名为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用户正确完成完整转储所需的额外拨款是什么?
最佳答案
假设完全转储还意味着VIEW
和EVENT
,则需要:
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
?