MySQL / Amazon RDS त्रुटि: "आपके पास सुपर विशेषाधिकार नहीं हैं ..."


97

मैं अपने mysql डेटाबेस को Amazon EC2 से RDS में कॉपी करने का प्रयास कर रहा हूँ:

मैंने mysqldumpइसका उपयोग करके अपने डेटाबेस के रूट फ़ोल्डर में सफलतापूर्वक अपना काम किया :

root@ip-xx-xx-xx-xx:~# mysqldump my_database -u my_username -p > my_database.sql

तब मैंने इसे .sql फ़ाइल को अपने नए RDS डेटाबेस में स्थानांतरित करने का प्रयास किया:

root@ip-xx-xx-xx-xx:~# mysql my_database -u my_username -p -h  
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql

दुर्भाग्य से, मुझे निम्नलिखित त्रुटि संदेश मिला:

You do not have the SUPER privilege and binary logging is enabled 
(you *might* want to use  the less safe log_bin_trust_function_creators variable)

मैंने GRANT SUPER..कई तरीकों से कोशिश की , लेकिन जब मैं भी ऐसा करने की कोशिश कर रहा हूं, तो मुझे त्रुटियाँ हो रही हैं। टंकण mysql > FLUSH privileges;या तो काम नहीं करता है

मैं एक mysql शुरुआत कर रहा हूँ इतना आसान सवाल के लिए खेद है। विचार?


9
आप नहीं कर सकते GRANT SUPER RDS पर । RDS सुपरर विशेषाधिकार प्राप्त करने का कोई तरीका नहीं प्रदान करता है।
सिजयोज़

डंप बनाने और इसे पुनर्स्थापित करने के लिए एक ही MySQL उपयोगकर्ता नाम का उपयोग करें (डंप में कनेक्शन और DEFINER कीवर्ड के लिए)। Log_bin_trust_function_creators को बदलना वांछित समाधान नहीं है। सबसे बुरी बात इस मामले में -f पैरामीटर का उपयोग करना है
ad4s

मेरे मामले में मेरे sql फ़ाइल में CREATE FUNCTIONएक स्टेटमेंट है, जिसे एक विशेषाधिकार प्राप्त उपयोगकर्ता की आवश्यकता है। इसे देखें
एकाउंटेंट

जवाबों:


63

Http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ के अनुसार , आपको त्रुटियों के बिना अपनी डंप फ़ाइल लोड करने के लिए, AWS कंसोलlog_bin_trust_function_creators में 1 पर सेट करने की आवश्यकता है ।

यदि आप इन त्रुटियों को अनदेखा करना चाहते हैं, और बाकी डंप फ़ाइल को लोड करना चाहते हैं, तो आप -fविकल्प का उपयोग कर सकते हैं :

mysql -f my_database -u my_username -p -h  
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql

-fत्रुटि रिपोर्ट करेंगे, लेकिन डंप फ़ाइल के शेष संसाधित करना जारी रखेंगे।


हाय @Ross, इसके लिए धन्यवाद। दुर्भाग्य से, -fमदद का उपयोग नहीं किया। मुझे भी यही त्रुटि मिली। अपने लिंक का उपयोग करते हुए, मुझे RDS Cli टूल्स सिंटैक्स से परेशानी हो रही है। मतलब, जब मैं विशेषाधिकारों को बदलने के लिए जाता हूं तो मुझे निम्नलिखित त्रुटि मिलती है:rds-modify-db-parameter-group: Malformed input-Unrecognized option: -–parameters=name=log_bin_trust_function_creators, Usage: rds-modify-db-parameter-group DBParameterGroupName --parameters "name=value, value=value, method=value" [ --parameters "name=value, value=value, method=value" ...] [General Options]
टिम पीटरसन

यहाँ मेरा आदेश है जो मुझे उपरोक्त त्रुटि देता है: ./rds-modify-db-parameter-group mygroup -–parameters "name=log_bin_trust_function_creators, value=on, method=immediate" –I="accesskeyxxxxxx" –S="secretkeyxxxxxxxx"मुझे पता है कि यह एक उद्धरण या डबल-डैश मुद्दा है, लेकिन उन प्रकार के परिवर्तनों में से कोई भी अब तक काम नहीं कर रहा है, ऊह!
टिम पीटरसन

4
-fविकल्प यह सिर्फ गैर हमलावर फ़ाइल में SQL कथन संसाधित किया जा करने की अनुमति देगा त्रुटियों दूर नहीं होगा। मैंने जो पढ़ा है, उससे आरडीएस डंप फ़ाइल में संग्रहीत प्रक्रियाओं पर घुट रहा है। स्टोर प्रक्रियाओं के बिना एक डंप फ़ाइल बनाने की कोशिश करें और देखें कि क्या यह लोड ठीक है:mysqldump --routines=0 --triggers=0 --events=0 my_database -u my_username -p
रॉस स्मिथ II

2
- @ रॉस, जबर्दस्त काम किया, मेरा डेटाबेस वहाँ है, वाह यह एक कष्टप्रद मुद्दा है, ऐसा लग रहा है कि AWS को इसके बारे में कुछ करना चाहिए।
टिम पीटरसन

कम से कम मैं -fविकल्प के साथ सभी डेटा लोड कर सकता हूं । दूसरा चरण अलग
कायमाज

134
  1. RDS वेब कंसोल खोलें।
  2. "पैरामीटर समूह" टैब खोलें।
  3. एक नया पैरामीटर समूह बनाएँ। संवाद पर, MySQL डेटाबेस संस्करण के अनुकूल MySQL परिवार चुनें, इसे एक नाम दें और पुष्टि करें। बस बनाए गए पैरामीटर समूह का चयन करें और "पैरामीटर संपादित करें" जारी करें।
  4. पैरामीटर के लिए देखें 'log_bin_trust_function_creators' और '1' पर उसका मान सेट करें।
  5. परिवर्तनों को सुरक्षित करें।
  6. "इंस्टेंस" टैब खोलें। अपने MySQL उदाहरण का विस्तार करें और "इंस्टेंस एक्शन" को "संशोधित करें" नाम दें।
  7. बस बनाए गए पैरामीटर समूह का चयन करें और "तुरंत लागू करें" सक्षम करें।
  8. "जारी रखें" पर क्लिक करें और परिवर्तनों की पुष्टि करें।
  9. "संशोधन" ऑपरेशन पूरा होने की प्रतीक्षा करें।
  10. फिर से, "इंस्टेंस" टैब खोलें। अपने MySQL उदाहरण का विस्तार करें और "इंस्टेंस एक्शन" टैब का विस्तार करें और "रिबूट" चुनें।

> बिंदु 9 क्या करता है ... आप पहले से परिभाषित पैरामीटर समूह का उपयोग करने के लिए अपने उदाहरण को समायोजित करते हैं। अधिक विस्तार के लिए डैनियल फेरर्स द्वारा यह मूल ब्लॉग पोस्ट देखें: techtavern.wordpress.com/2013/06/17/…
एंड्रयूएल

क्या यह आरडीएस मैसकल प्रतिकृति को रोक देगा?
रामरतन गुप्ता

hi @ arun-r, मैं आपके द्वारा बताए गए चरणों से गुजरता हूं, लेकिन पैरामीटर 'log_bin_trust_function_creators' मामले में उपलब्ध नहीं है। मुझे लगता है कि नवीनतम AWS RDS में कुछ बदला गया है। क्या आप कृपया मेरी मदद कर सकते हैं कि अब मैं यह कैसे कर सकता हूं? धन्यवाद,
पवन डेवलपर्स

@RamratanGupta यह रोक नहीं होते
अरुण-r

1
@ आपकी प्रतिक्रिया के लिए अरुण-आर धन्यवाद। मैंने अपना मसला हल कर लिया। वास्तव में मुझे सूची में log_bin_trust_function_creators मिला। लेकिन मेरा मुद्दा AWS के समर्थन से संपर्क करके हल किया गया है
पवन डेवलपर्स

33

डंप फ़ाइल में ट्रिगर्स और संग्रहीत कार्यविधियों के साथ समस्या यह है कि इन परिभाषाओं में वह उपयोगकर्ता शामिल है जिसे संग्रहीत कार्यविधि DEFINER द्वारा बनाई जानी चाहिए। उपयोगकर्ता सबसे अधिक संभावना आरडीएस में मौजूद नहीं है इसलिए एक त्रुटि तब उठाई जाती है। डंप फ़ाइल को लोड करने में सक्षम होने के लिए आप डीएफ़र को सेड या पर्ल का उपयोग करके हटा सकते हैं और उस उपयोगकर्ता के साथ संग्रहीत कार्यविधि / ट्रिगर बना सकते हैं जो आयात कर रहा है।

perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' < mysqldump.sql > mysqldump.fixed.sql

अब आपको निश्चित डंप फ़ाइल को लोड करने में सक्षम होना चाहिए

mysql my_database -u my_username -p -h rds_host < mysqldump.fixed.sql

जैसा कि पहले उत्तर में कहा गया था, आपको डीबी पैरामीटर सेट करना चाहिए:

log_bin_trust_function_creators = 1

1
साफ़ definers भी sed के साथ पूरा किया जा सकता है: एसईडी मैं के / Definer = OldDefiner@ localhost/ Definer = NewDefiner@ localhost/ जी './TargetSqlFile.sql
siliconrockstar

14

मेरे लिए, मेरे डंप फ़ाइल में केवल 2 कमांड थे जिन्हें सुपरर विशेषाधिकार की आवश्यकता थी:

  • SET @@GLOBAL.gtid_purged
  • SET @@SESSION.SQL_LOG_BIN

Mysqldump डॉक्स के अनुसार आप इन्हें निष्क्रिय कर सकते हैं--set-gtid-purged=OFF

फिर आदमी mysqldump को देख रहा है :

ON का उपयोग करें यदि इरादा डंप किए गए सर्वर से केवल कुछ डेटा का उपयोग करके एक नया प्रतिकृति दास तैनात करना है। यदि आशय किसी टोपोलॉजी में कॉपी करके तालिका को सुधारना है तो ऑफ़ का उपयोग करें। यदि आशय प्रतिकृति टोपोलॉजी के बीच तालिका की नकल करना है जो कि अपमानजनक है और ऐसा ही रहेगा तो ऑफ का उपयोग करें।

इसलिए मैंने --set-gtid-purged=OFFअपनी mysqldumpकमांड में जोड़ने का फैसला किया और फिर मैं परिणामस्वरूप डंप फ़ाइल को सफलतापूर्वक आयात कर सकता था।


1
हाँ, यह बात थी। मेरी डंप फ़ाइल अपेक्षाकृत छोटी थी, इसलिए मैंने इन 2 आदेशों की सभी घटनाओं को इसमें से हटा दिया।
ज़ोलेबार

6

जैसा कि AWS प्रलेखन ट्रिगर में परिभाषित किया गया है, प्रक्रियाएं, और फ़ंक्शन डिफ़ॉल्ट रूप से अक्षम हैं क्योंकि बाइनरी लॉगिंग डिफ़ॉल्ट रूप से सक्षम है। मूल रूप से अक्षम करना आपके db को अधिक सुरक्षित बनाता है, लेकिन अगर आपने नेटवर्क के माध्यम से ठीक से सुरक्षित किया है तो यह कोई मायने नहीं रखेगा।

इन चरणों का पालन करें और आपकी समस्या ठीक हो जाएगी https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/

प्रक्रियाएँ बनाते समय भी आपको निश्चित का उपयोग नहीं करना चाहिए। एक साधारण सीड कमांड इसे हटा सकती है।


5

संपादन के अलावा

log_bin_trust_function_creators = 1

आपको अपनी डंप फ़ाइल से सभी DEFINER को निकालने की आवश्यकता है , SED के लिए निम्न लिंक की जाँच करें कमांड के आपकी sql डंप फ़ाइल को साफ करने में मदद कर सकता है।

https://www.percona.com/blog/2014/07/02/using-mysql-triggers-and-views-in-amazon-rds/#comment-10968243


1

उपयोग किए गए arun-r उत्तर के बाद, यदि समस्या हल नहीं हुई है तो आपको अपनी डंप फ़ाइल को संशोधित करने की आवश्यकता है। यह आसान है।

डंप फ़ाइल में आपको लाइनें मिलेंगी जैसे:

DELIMITER ;;
CREATE DEFINER=`username_from_dumped_database`@`host_from_dumped_database` PROCEDURE `procedure_or_function_name`()
BEGIN

आपको प्रतिस्थापित करना होगा:

  • username_from_dumped_database rds डेटाबेस पर आपके उपयोगकर्ता नाम से।
  • host_from_dumped_databse द्वारा %

मुझे पता नहीं क्यों लेकिन इस चाल ने मेरे लिए काम किया। एक साधारण पाठ संपादक ऐसा करने के लिए पर्याप्त है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.