我有一个MySQL的用户称为转储具有以下烫发:
GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%'
GRANT SELECT, LOCK TABLES ON `myschema`.* TO 'dump'@'%'
我想转储使用dump用户的所有数据(包括触发器和过程)。我拨打以下方式的mysqldump:
mysqldump -u dump -p --routines --triggers --quote-names --opt \
--add-drop-database --databases myschema > myschema.sql
一切皆与除触发转储文件,他们缺少OK!
触发器是正确的倾倒,如果我尝试用MySQL的root用户的mysqldump:
mysqldump -u root -p --routines --triggers --quote-names --opt \
--add-drop-database --databases myschema > myschema.sql
所以,我想这是一个烫发的问题......我有哪些转储MySQL用户需求做正确的完全转储额外的补助?
通过完全转储假设你也意味着VIEW
s和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
s,那么很不幸,你还需要EXECUTE
。
我自己的问题是:为什么我需要SELECT
如果我只想要一个无数据转储?
我发现额外的GRANT我需要!
GRANT TRIGGER ON `myschema`.* TO 'dump'@'%'
在这里,你对官方文档的参考:http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger
TRIGGER权限允许触发操作。你必须拥有这个权限表创建,删除,或该表执行触发器。
我发现,有时如果VIEW DEFINER用户不存在,转储失败。
改变它,描述there
除了Jannes答案,使用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文件,目录必须是由服务器和使用必须有FILE权限的MySQL账户可写。因为mysqldump的创建*在同一目录下的.sql,它必须是由您的系统登录帐户可写。