最低补助需要通过的mysqldump倾倒一个完整的模式? (触发器丢失!)

问题描述 投票:69回答:4

我有一个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用户需求做正确的完全转储额外的补助?

mysql database mysqldump database-backups grant
4个回答
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'@'%';

如果你有一个执行功能VIEWs,那么很不幸,你还需要EXECUTE

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


8
投票

我发现额外的GRANT我需要!

  GRANT TRIGGER ON `myschema`.* TO 'dump'@'%'

在这里,你对官方文档的参考:http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger

TRIGGER权限允许触发操作。你必须拥有这个权限表创建,删除,或该表执行触发器。


1
投票

我发现,有时如果VIEW DEFINER用户不存在,转储失败。

改变它,描述there


0
投票

除了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,它必须是由您的系统登录帐户可写。

© www.soinside.com 2019 - 2024. All rights reserved.