MySQL 5.6.x
और लिनक्स के लिए DEFINER सूचना को निकालने के लिए यहां एक पूर्ण कार्य समाधान है । (पर परीक्षण किया गयाCentOS 6.5
)।
सामान्य रूप से हमें निम्नलिखित प्रविष्टियों को मैसकल डंप (यदि डेटा और ट्रिगर्स / रूटीन / फ़ंक्शन के साथ लिया जाता है) से बदलना होगा।
/*!50013 DEFINER=`MYSQLUSER`@`localhost` SQL SECURITY DEFINER */
/*!50013 DEFINER=`MYSQLUSER`@`%` SQL SECURITY DEFINER */
CREATE DEFINER=`MYSQLUSER`@`%` PROCEDURE `PROCEDURENAME`(
CREATE DEFINER=`MYSQLUSER`@`localhost` PROCEDURE `PROCEDURENAME`(
CREATE DEFINER=`MYSQLUSER`@`%` FUNCTION `FUNCTIONNAME`(
CREATE DEFINER=`MYSQLUSER`@`localhost` FUNCTION `FUNCTIONNAME`(
/*!50003 CREATE*/ /*!50017 DEFINER=`MYSQLUSER`@`%`*/ /*!50003 TRIGGER `TRIGGERNAME`
/*!50003 CREATE*/ /*!50017 DEFINER=`MYSQLUSER`@`localhost`*/ /*!50003 TRIGGER `TRIGGERNAME`
डंप mysqldump कमांड के साथ लिया गया था।
mysqldump -uMYSQLUSER -pPASSWORD DATABASENAME -R > dbdump.sql
बिना किसी डीएफ़एनआर जानकारी के आवश्यक डंप फ़ाइल को तीन आदेशों के साथ प्राप्त किया जा सकता है।
Command-1
sed -i 's|DEFINER=[^*]*\*|\*|g' [PATH/]dbdump.sql
Command-2
find -name [PATH/]dbdump.sql | xargs perl -pi -e "s/ DEFINER=\`MYSQLUSER\`@\`localhost\`//"
Command-3
find -name [PATH/]dbdump.sql | xargs perl -pi -e "s/ DEFINER=\`MYSQLUSER\`@\`%\`//"
यदि डंप फ़ाइल आपके वर्तमान फ़ोल्डर में है तो [PATH /] पर ध्यान न दें।
यदि तालिकाओं में डेटा बहुत बड़ा है, तो दो फ़ाइलों में डंप लें, एक डंप फ़ाइल में डेटा के साथ डंप लें और अन्य डंप फ़ाइल में केवल लिपियों के डंप लें (ट्रिगर / फ़ंक्शंस / प्रक्रियाएं।) और उपरोक्त तीन चलाएं। 2 डंप (स्क्रिप्ट) फ़ाइल पर कमांड।