हमारे mysqldump सर्वोत्तम अभ्यासों के दूसरे और अंतिम भाग में हम इस बारे में बात करेंगे कि आपके MySQL डेटाबेस से संग्रहीत प्रोग्राम ऑब्जेक्ट्स और दृश्यों के लिए माइग्रेशन और आयात को कैसे हैंडल किया जाए। बड़े MySQL डेटाबेस के लिए एक सफल डंप और पुनर्स्थापना संचालन के लिए पूर्वापेक्षाओं के बारे में अधिक पढ़ने के लिए, इस 2-भाग ब्लॉग श्रृंखला का पहला भाग देखें।
अपनी संग्रहीत कार्यविधियों, कार्यों और ट्रिगर्स को आयात करना
डिफ़ॉल्ट रूप से, mysqldump दृश्य और ट्रिगर आयात करता है। हालांकि यह प्रक्रियाओं, कार्यों और घटनाओं को आयात नहीं करता है। प्रक्रियाओं और कार्यों को आयात करने के लिए, --routines
विकल्प निर्दिष्ट किया जाना चाहिए, और ईवेंट आयात करने के लिए, --events
विकल्प निर्दिष्ट किया जाना चाहिए।
1. ट्रिगर आयात करना
Mysqldump डिफ़ॉल्ट रूप से आपके डेटाबेस में सभी ट्रिगर्स को डंप करने का प्रयास करेगा। तालिका के triggers
dump को डंप करने में सक्षम होने के लिए , आपके पास TRIGGER
. होना चाहिए मेज के लिए विशेषाधिकार। यदि डंप उपयोगकर्ता के पास यह विशेषाधिकार नहीं है, तो ट्रिगर्स को छोड़ दिया जाएगा और mysqldump कोई त्रुटि नहीं फेंकेगा। इसलिए यदि आपको अपने गंतव्य डेटाबेस में आयात किए गए कोई ट्रिगर नहीं दिखाई देते हैं, तो आश्चर्यचकित न हों।
2. इवेंट आयात करना
ईवेंट आयात करने के लिए, आपको --events
निर्दिष्ट करना होगा विकल्प mysqldump उपयोगिता को लागू करते समय। इस विकल्प के लिए EVENT
. की आवश्यकता है उन डेटाबेस के लिए विशेषाधिकार। फिर से, यदि डंप उपयोगकर्ता के पास ये विशेषाधिकार नहीं हैं, तो mysqldump चुपचाप घटनाओं को छोड़ देगा, भले ही आपने mysqldump को लागू करते समय -event विकल्प निर्दिष्ट किया हो।
3. फ़ंक्शन और संग्रहीत कार्यविधि आयात करना
रूटीन आयात करने के लिए, आपको --routines
निर्दिष्ट करना होगा विकल्प mysqldump उपयोगिता को लागू करते समय। इस विकल्प के लिए global select
की आवश्यकता है विशेषाधिकार इस मामले में भी, यदि डंप उपयोगकर्ता के पास ये विशेषाधिकार नहीं हैं, तो mysqldump चुपचाप कार्यों और प्रक्रियाओं को छोड़ देगा, भले ही आपने --routines
निर्दिष्ट किया हो mysqldump को लागू करते समय विकल्प।
3.1 गैर नियतात्मक कार्यों को आयात करना
एक संग्रहीत प्रोग्राम जो डेटा को संशोधित करता है, उसे गैर नियतात्मक कहा जाता है यदि यह दोहराने योग्य परिणाम नहीं देता है। उदाहरण रैंड () फ़ंक्शन। प्रतिकृति सेटअप में ऐसे कार्यों का उपयोग करना विशेष रूप से चुनौतीपूर्ण है, क्योंकि उनके परिणामस्वरूप स्रोत और प्रतिकृति पर अलग-अलग डेटा हो सकते हैं। ऐसी संभावनाओं को नियंत्रित करने के लिए, यदि बाइनरी लॉग सक्षम हैं, तो MySQL फ़ंक्शन निर्माण पर कुछ प्रतिबंध लगाता है।
डिफ़ॉल्ट रूप से, एक CREATE FUNCTION
के लिए स्वीकार किया जाने वाला कथन, DETERMINISTIC
. में से कम से कम एक , NO SQL
, या READS SQL DATA
स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए। अन्यथा कोई त्रुटि होती है:
ERROR 1418 (HY000) at line 181: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_funable)
इसलिए यदि आपके फ़ंक्शन को स्रोत पर नियतात्मक के रूप में घोषित नहीं किया गया है, और आपके गंतव्य पर बाइनरी लॉगिंग सक्षम है, तो आप डंप की पुनर्स्थापना के दौरान उपरोक्त त्रुटि देखेंगे। इसलिए अपने कार्यों की नियतात्मक प्रकृति को पहले से समझना महत्वपूर्ण है। यदि आप सुनिश्चित हैं कि आपके कार्य नियतात्मक हैं, तो आपको log_bin_trust_function_creators
चालू करना होगा पुनर्स्थापना कार्रवाई से पहले अपने गंतव्य पर कॉन्फ़िगरेशन। सक्षम होने पर, MySQL बाइनरी लॉगिंग सक्षम होने पर भी ऐसे कार्यों के निर्माण की अनुमति देता है।
4. संग्रहीत दिनचर्या और दृश्यों की SQL सुरक्षा विशेषता।
MySQL एक SQL SECURITY
की अनुमति देता है स्टोर प्रोग्राम या दृश्य बनाते समय निर्दिष्ट किए जाने वाले संदर्भ। SQL SECURITY
विशेषता को DEFINER
. के रूप में निर्दिष्ट किया जा सकता है या INVOKER
. अगर SQL_SECURITY
संदर्भ है DEFINER
, रूटीन DEFINER
. में नामित खाते के विशेषाधिकारों का उपयोग करके रूटीन निष्पादित करता है खंड। अगर संदर्भ INVOKER
है , रूटीन इसे लागू करने वाले उपयोगकर्ता के विशेषाधिकारों का उपयोग करके निष्पादित करता है। डिफ़ॉल्ट मान DEFINER
है ।
यदि आप संग्रहीत दिनचर्या या विचारों को पुनर्स्थापित कर रहे हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि निश्चित उपयोगकर्ता खाता आपके गंतव्य डेटाबेस पर उपयुक्त अनुदान के साथ मौजूद है। अन्यथा आप पुनर्स्थापना के दौरान विफलताओं का सामना करेंगे।
आइए इसे विचारों से संबंधित एक उदाहरण के साथ प्रदर्शित करते हैं।
मान लें कि आपके पास Views V1 और V2 निम्नानुसार परिभाषित हैं:
CREATE definer=admin@'%' VIEW mydb.V1 AS SELECT * FROM solution_table; CREATE definer=admin@'%' VIEW mydb.V2 AS SELECT * FROM V1 where num1=10;
ध्यान दें कि दृश्य डिफ़ॉल्ट रूप से mysqldump द्वारा डंप किए जाते हैं और यदि आपके पास अपने गंतव्य पर उपयोगकर्ता 'व्यवस्थापक' नहीं है, तो आपको पुनर्स्थापना कार्रवाई के दौरान निम्न त्रुटि का सामना करना पड़ेगा:पी>
Command failed with error - ERROR 1449 (HY000) at line 206 in file: '/mysql_data/mysqldump/sqldump_1582457155758.sql': The user specified as a definer ('admin'@'%') does not exist.
ध्यान दें कि यह सुनिश्चित करने के लिए पर्याप्त नहीं है कि उपयोगकर्ता मौजूद है, लेकिन उपयोगकर्ता को विचारों को निष्पादित करने के लिए उपयुक्त विशेषाधिकारों की आवश्यकता है। उदाहरण के लिए यदि उपयोगकर्ता admin@'%'
गंतव्य पर मौजूद है, लेकिन इसमें SELECT
नहीं है mydb डेटाबेस पर विशेषाधिकार, आपको एक त्रुटि संदेश दिखाई देगा:
'/mysql_data/mysqldump/sqldump_1582456858033.sql':View 'mydb.V2' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them.
|
सारांश
इस 2-भाग वाली ब्लॉग श्रृंखला में, हमने आपके डेटा और संग्रहीत कार्यक्रमों के सफल स्थानांतरण को सुनिश्चित करने के लिए आवश्यक महत्वपूर्ण पूर्वापेक्षाओं को शामिल किया है। स्केलग्रिड MySQL होस्टिंग आपके डेटा को स्केलग्रिड प्लेटफॉर्म पर आयात करते समय एक सहज अनुभव प्रदान करने के लिए इन दिशानिर्देशों को संभालती है। कृपया हमारे साथ अपना अनुभव और MySQL डेटा माइग्रेशन के लिए अपनाई जाने वाली सर्वोत्तम प्रथाओं को साझा करें!