2011-12-28 15 views
60

我有一個MySQL用戶名爲轉儲有以下燙髮:mysqldump轉儲完整模式所需的最小GRANT? (觸發器是缺少!!)

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 

一切皆與除觸發器,他們缺少轉儲文件就OK了!

觸發器正確傾倒,如果我試圖用mysqldump的根 MySQL用戶:

mysqldump -u root -p --routines --triggers --quote-names --opt \ 
    --add-drop-database --databases myschema > myschema.sql 

所以,我想這是一個燙髮的問題......什麼是額外撥款我轉儲的MySQL用戶需要正確執行完整轉儲?

回答

83

通過完全轉儲假設你也意味着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如果我只想做一個無數據轉儲?

+1

對於5.5及更高版本,您實際上不需要TRIGGER權限來轉儲觸發器代碼。 – bluecollarcoder 2013-12-17 23:57:28

+1

我使用5.5並需要TRIGGER權限來轉儲觸發器代碼。 – heuri 2014-07-21 11:35:19

+0

在我的情況下,它似乎我還需要'LOCK TABLES'在我試圖傾倒自己的數據庫上...使用'5.5.49-MariaDB' – 0xC0000022L 2016-09-15 10:15:07

7

我找到了額外的GRANT我需要!

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

這裏有官方文檔參考:http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger

TRIGGER權限允許觸發操作。您必須擁有該表的特權才能創建,刪除或執行該表的觸發器。

+3

這個名字實際上是TRIGGER,沒有TRIGGERS – thenickdude 2012-07-06 01:10:08

+0

即使這可能回答筆者的問題,它並沒有回答這個問題:「什麼是最低GRANT要求做完全轉儲「。例如:EVENT和SHOW VIEW都丟失了。 – Jannes 2013-08-21 07:43:51

+0

對於5.5及以上版本,您實際上不需要'TRIGGER'特權來轉儲觸發代碼。 – bluecollarcoder 2013-12-17 23:56:27

1

我發現,有時如果VIEW DEFINER用戶不存在,轉儲將失敗。

改變它,描述there

+0

不知道爲什麼這是倒投了,解決了我的問題。我將定義者指定爲'person'而不是'person @ localhost'。謝謝! – stianlik 2017-08-12 10:31:43

相關問題