mysqldump转储完整模式所需的最小GRANT? (TRIGGER失踪!!)
我有一个叫做dump的MySQL用户,下面是perms:
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
s,你将需要:
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
如果我只想做一个无数据转储?
我find了额外的GRANT我需要!
GRANT TRIGGER ON `myschema`.* TO 'dump'@'%'
在这里你可以参考官方的文档: http : //dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger
TRIGGER权限启用触发操作。 您必须拥有此表的特权才能创build,删除或执行该表的触发器。
我发现,有时如果VIEW DEFINER用户不存在,转储将失败。
改变它, 如上所述