2017-05-17 6 views
14

तो मैं एसडीएल फ़ाइल को आरडीएस (1 जी एमईएम, 1 सीपीयू) में आयात करने का प्रयास करता हूं। एसक्यूएल फ़ाइल एक्सेस अस्वीकार कर दिया गया; आपको इस ऑपरेशन के लिए सुपर विशेषाधिकार (कम से कम एक) की आवश्यकता है

mysql -h xxxx.rds.amazonaws.com -u उपयोगकर्ता -ppass --max-अनुमति पैकेट = 33,554,432 db < db.sql

यह कम से अटक गया 1.4G

की तरह है:

ERROR 1227 (42000) at line 374: Access denied; you need (at least one of) the SUPER privilege(s) for this operation 

वास्तविक एसक्यूएल सामग्री है:

/*!50003 CREATE*/ /*!50017 DEFINER=`another_user`@`1.2.3.4`*/ /*!50003 TRIGGER `change_log_BINS` BEFORE INSERT ON `change_log` FOR EACH ROW 
IF (NEW.created_at IS NULL OR NEW.created_at = '00-00-00 00:00:00' OR NEW.created_at = '') THEN 
     SET NEW.created_at = NOW(); 
END IF */;; 

another_user आरडीएस में ही अस्तित्व में नहीं है, तो मैं कार्य करें:

GRANT ALL PRIVILEGES ON db.* TO [email protected]'localhost'; 

अभी भी कोई भाग्य नहीं है।

उत्तर

23

या तो अपनी sqldump फ़ाइल से DEFINER=.. कथन हटाएं, या उपयोगकर्ता मानों को CURRENT_USER से हटा दें।

आरडीएस द्वारा प्रदान किया गया MySQL सर्वर किसी अन्य उपयोगकर्ता (मेरे अनुभव में) के लिए DEFINER वाक्यविन्यास की अनुमति नहीं देता है।

आप उन्हें फ़ाइल से निकालने के लिए एक sed स्क्रिप्ट का उपयोग कर सकते हैं:

sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i oldfile.sql 
+0

आप सही हैं। कारण यह काम नहीं करता है कि किसी अन्य उपयोगकर्ता को 'डेफिनर' के रूप में निर्दिष्ट करते समय लॉग-इन किए गए उपयोगकर्ता के पास 'सुपर' विशेषाधिकार नहीं है (जिसे स्वयं आरडीएस में अनुमति नहीं है) मनमाने ढंग से विशेषाधिकार वृद्धि - अनुमति वाले कार्यक्रमों के साथ चलने की अनुमति देगा डिफ़ॉल्ट रूप से उनके 'डेफिनर' के प्रमाण-पत्र और विशेषाधिकार (कॉलिंग उपयोगकर्ता के रूप में - उनके 'INVOKER') के विपरीत। इसके अलावा [सर्वर फॉल्ट पर] (https://serverfault.com/a/555983/153161)। –

+0

मैन आप एक जीवन बचतकर्ता हैं। अगर मेरी होस्टिंग कंपनी ने निर्यात किया तो मुझे भ्रष्ट डेटाबेस बताएं और पुनर्स्थापित करने के लिए कुछ भी नहीं किया जा सकता था। सही समाधान – Woody

+3

किसी कारण से मुझे +: '' '' '' '' '' '' '' '' '[^'] * '@' [^ '] *' // '-i oldfile.sql''' के बजाय * का उपयोग करना पड़ा था। ' –

संबंधित मुद्दे