अप्रैल 2018 सिर्फ MySQL की दुनिया के लिए एक तारीख नहीं है। MySQL 8.0 वहां जारी किया गया था, और 1 साल से अधिक समय के बाद, शायद इस नए संस्करण में माइग्रेट करने पर विचार करने का समय आ गया है।
MySQL 8.0 में महत्वपूर्ण प्रदर्शन और सुरक्षा सुधार हैं, और, जैसा कि एक नए डेटाबेस संस्करण में सभी माइग्रेशन में होता है, डेटा हानि, अत्यधिक जैसे कठिन मुद्दों से बचने के लिए उत्पादन में जाने से पहले कई बातों का ध्यान रखना चाहिए। डाउनटाइम, या माइग्रेशन कार्य के दौरान रोलबैक भी।
इस ब्लॉग में, हम कुछ नई MySQL 8.0 सुविधाओं का उल्लेख करेंगे, कुछ अप्रचलित सामग्री, और माइग्रेट करने से पहले आपको किन बातों का ध्यान रखना चाहिए।
MySQL 8.0 में नया क्या है?
आइए अब इस नए MySQL संस्करण के लिए आधिकारिक दस्तावेज़ीकरण में उल्लिखित कुछ सबसे महत्वपूर्ण विशेषताओं को संक्षेप में प्रस्तुत करते हैं।
- MySQL में एक ट्रांजेक्शनल डेटा डिक्शनरी शामिल है जो डेटाबेस ऑब्जेक्ट्स के बारे में जानकारी संग्रहीत करता है।
- एक परमाणु DDL स्टेटमेंट डेटा डिक्शनरी अपडेट, स्टोरेज इंजन ऑपरेशन और बाइनरी लॉग राइट्स को DDL ऑपरेशन से एक सिंगल, एटॉमिक ट्रांजैक्शन में जोड़ता है।
- MySQL सर्वर स्वचालित रूप से mysql स्कीमा में सिस्टम टेबल को अपग्रेड करने के लिए अगले स्टार्टअप पर सभी आवश्यक अपग्रेड कार्य करता है, साथ ही साथ अन्य स्कीमा जैसे sys स्कीमा और उपयोगकर्ता स्कीमा में ऑब्जेक्ट। DBA के लिए यह आवश्यक नहीं है कि वह mysql_upgrad को लागू करे।
- यह संसाधन समूहों के निर्माण और प्रबंधन का समर्थन करता है, और सर्वर के भीतर चल रहे थ्रेड्स को विशेष समूहों को असाइन करने की अनुमति देता है ताकि समूह के लिए उपलब्ध संसाधनों के अनुसार थ्रेड निष्पादित हो सकें।
- टेबल एन्क्रिप्शन को अब एन्क्रिप्शन डिफ़ॉल्ट को परिभाषित और लागू करके विश्व स्तर पर प्रबंधित किया जा सकता है। default_table_encryption चर नए बनाए गए स्कीमा और सामान्य टेबलस्पेस के लिए एन्क्रिप्शन डिफ़ॉल्ट को परिभाषित करता है। एन्क्रिप्शन डिफ़ॉल्ट को table_encryption_privilege_check चर को सक्षम करके लागू किया जाता है।
- डिफ़ॉल्ट वर्ण सेट लैटिन1 से utf8mb4 में बदल गया है।
- यह डेटा प्रकार विनिर्देशों में डिफ़ॉल्ट मानों के रूप में अभिव्यक्तियों के उपयोग का समर्थन करता है। इसमें BLOB, TEXT, GEOMETRY, और JSON डेटा प्रकारों के लिए डिफ़ॉल्ट मानों के रूप में अभिव्यक्तियों का उपयोग शामिल है।
- MySQL घटक आर्किटेक्चर का उपयोग करने के लिए त्रुटि लॉगिंग को फिर से लिखा गया था। पारंपरिक त्रुटि लॉगिंग को अंतर्निर्मित घटकों का उपयोग करके कार्यान्वित किया जाता है, और सिस्टम लॉग का उपयोग करके लॉगिंग को लोड करने योग्य घटक के रूप में कार्यान्वित किया जाता है।
- एक नए प्रकार का बैकअप लॉक DML को एक ऑनलाइन बैकअप के दौरान अनुमति देता है, जबकि संचालन को रोकता है जिसके परिणामस्वरूप एक असंगत स्नैपशॉट हो सकता है। नया बैकअप लॉक बैकअप के लिए लॉक इंस्टेंस और अनलॉक इंस्टेंस सिंटैक्स द्वारा समर्थित है। इन कथनों का उपयोग करने के लिए BACKUP_ADMIN विशेषाधिकार की आवश्यकता है।
- MySQL सर्वर अब एक TCP/IP पोर्ट को विशेष रूप से व्यवस्थापकीय कनेक्शन के लिए कॉन्फ़िगर करने की अनुमति देता है। यह एकल प्रशासनिक कनेक्शन का एक विकल्प प्रदान करता है जिसे सामान्य कनेक्शन के लिए उपयोग किए जाने वाले नेटवर्क इंटरफेस पर अनुमति दी जाती है, भले ही max_connections कनेक्शन पहले से ही स्थापित हो।
- यह अदृश्य अनुक्रमणिका का समर्थन करता है। इस अनुक्रमणिका का उपयोग अनुकूलक द्वारा नहीं किया जाता है और किसी अनुक्रमणिका को हटाने के बिना क्वेरी प्रदर्शन पर उसके प्रभाव का परीक्षण करना संभव बनाता है।
- एक ही डेटाबेस का उपयोग करके SQL और NoSQL दोनों दस्तावेज़ अनुप्रयोगों को विकसित करने के लिए दस्तावेज़ स्टोर।
- MySQL 8.0 सामान्य SET GLOBAL एक के बजाय SET PERSIST कमांड का उपयोग करके वैश्विक, गतिशील सर्वर चर को बनाए रखना संभव बनाता है।
MySQL सुरक्षा और खाता प्रबंधन
चूंकि सुरक्षा और उपयोगकर्ता प्रबंधन से संबंधित कई सुधार हैं, हम उन्हें एक अलग अनुभाग में सूचीबद्ध करेंगे।
- mysql सिस्टम डेटाबेस में ग्रांट टेबल अब InnoDB टेबल हैं।
- नया caching_sha2_password प्रमाणीकरण प्लगइन अब MySQL 8.0 में डिफ़ॉल्ट प्रमाणीकरण विधि है। यह SHA-256 पासवर्ड हैशिंग को लागू करता है, लेकिन कनेक्ट समय पर विलंबता के मुद्दों को हल करने के लिए कैशिंग का उपयोग करता है। यह mysql_native_password प्लगइन की तुलना में अधिक सुरक्षित पासवर्ड एन्क्रिप्शन प्रदान करता है, और sha256_password से बेहतर प्रदर्शन प्रदान करता है।
- MySQL अब भूमिकाओं का समर्थन करता है, जिन्हें विशेषाधिकारों का संग्रह कहा जाता है। भूमिकाओं को विशेषाधिकार दिए जा सकते हैं और उनसे निरस्त किया जा सकता है, और उन्हें उपयोगकर्ता खातों से दिया और निरस्त किया जा सकता है।
- MySQL अब पासवर्ड इतिहास के बारे में जानकारी रखता है, पिछले पासवर्ड के पुन:उपयोग पर प्रतिबंध को सक्षम करता है।
- यह प्रशासकों को उपयोगकर्ता खातों को इस तरह कॉन्फ़िगर करने में सक्षम बनाता है कि गलत पासवर्ड के कारण लगातार कई लॉगिन विफलताओं के कारण अस्थायी खाता लॉक हो जाता है।
InnoDB एन्हांसमेंट
पिछले बिंदु की तरह, इस विषय से संबंधित कई सुधार भी हैं, इसलिए हम उन्हें एक अलग अनुभाग में भी सूचीबद्ध करेंगे।
- वर्तमान अधिकतम ऑटो-इन्क्रीमेंट काउंटर वैल्यू हर बार मूल्य बदलने पर रीडो लॉग में लिखा जाता है, और प्रत्येक चेकपॉइंट पर एक इंजन-निजी सिस्टम टेबल पर सहेजा जाता है। ये परिवर्तन सर्वर के पुनरारंभ होने पर वर्तमान अधिकतम ऑटो-इन्क्रीमेंट काउंटर वैल्यू को स्थिर बनाते हैं
- इंडेक्स ट्री करप्शन का सामना करते समय, InnoDB रीडो लॉग में एक करप्शन फ्लैग लिखता है, जो करप्शन फ्लैग को क्रैश-सेफ बनाता है। InnoDB प्रत्येक चेकपॉइंट पर एक इंजन-निजी सिस्टम टेबल पर इन-मेमोरी करप्शन फ्लैग डेटा भी लिखता है। पुनर्प्राप्ति के दौरान, InnoDB दोनों स्थानों से भ्रष्टाचार के झंडे पढ़ता है और इन-मेमोरी टेबल और इंडेक्स ऑब्जेक्ट्स को दूषित के रूप में चिह्नित करने से पहले परिणाम मर्ज करता है।
- एक नया गतिशील चर, innodb_deadlock_detect, का उपयोग गतिरोध का पता लगाने को अक्षम करने के लिए किया जा सकता है। उच्च संगामिति प्रणालियों पर, जब कई थ्रेड एक ही लॉक के लिए प्रतीक्षा करते हैं, तो गतिरोध का पता लगाना मंदी का कारण बन सकता है। कभी-कभी, गतिरोध का पता लगाने को अक्षम करना और गतिरोध होने पर लेन-देन रोलबैक के लिए innodb_lock_wait_timeout सेटिंग पर भरोसा करना अधिक कुशल हो सकता है।
- InnoDB अस्थायी तालिकाएं अब साझा अस्थायी तालिका स्थान, ibtmp1 में बनाई गई हैं।
- mysql सिस्टम टेबल और डेटा डिक्शनरी टेबल अब MySQL डेटा डायरेक्टरी में mysql.ibd नाम की सिंगल InnoDB टेबलस्पेस फाइल में बनाई गई हैं। पहले, इन तालिकाओं को mysql डेटाबेस निर्देशिका में अलग-अलग InnoDB टेबलस्पेस फ़ाइलों में बनाया गया था।
- डिफ़ॉल्ट रूप से, पूर्ववत लॉग अब दो पूर्ववत टेबलस्पेस में रहते हैं जो MySQL इंस्टेंस प्रारंभ होने पर बनाए जाते हैं। पूर्ववत लॉग अब सिस्टम टेबलस्पेस में नहीं बनाए जाते हैं।
- नया innodb_dedicated_server वैरिएबल, जो डिफ़ॉल्ट रूप से अक्षम होता है, का उपयोग सर्वर पर खोजी गई मेमोरी की मात्रा के अनुसार InnoDB स्वचालित रूप से निम्नलिखित विकल्पों को कॉन्फ़िगर करने के लिए किया जा सकता है:innodb_buffer_pool_size, innodb_log_file_size, और innodb_flush_method। यह विकल्प MySQL सर्वर इंस्टेंस के लिए अभिप्रेत है जो एक समर्पित सर्वर पर चलता है।
- टेबलस्पेस फ़ाइलों को एक नए स्थान पर स्थानांतरित या पुनर्स्थापित किया जा सकता है, जबकि सर्वर innodb_directories विकल्प का उपयोग करके ऑफ़लाइन है।
अब, आइए उन कुछ विशेषताओं पर एक नज़र डालते हैं जिनका उपयोग अब आपको इस नए MySQL संस्करण में नहीं करना चाहिए।
MySQL 8.0 में क्या बहिष्कृत है?
निम्न सुविधाओं को हटा दिया गया है और भविष्य के संस्करण में हटा दिया जाएगा।
- utf8mb3 कैरेक्टर सेट को हटा दिया गया है। कृपया इसके बजाय utf8mb4 का उपयोग करें।
- चूंकि caching_sha2_password MySQL 8.0 में डिफ़ॉल्ट प्रमाणीकरण प्लगइन है और sha256_password प्रमाणीकरण प्लगइन की क्षमताओं का एक सुपरसेट प्रदान करता है, sha256_password बहिष्कृत है।
- Valid_password प्लगइन को सर्वर घटक अवसंरचना का उपयोग करने के लिए फिर से लागू किया गया है। वैलिडेट_पासवर्ड का प्लगइन फॉर्म अभी भी उपलब्ध है लेकिन इसे हटा दिया गया है।
- ALTER TABLESPACE और DROP TABLESPACE स्टेटमेंट के लिए इंजन क्लॉज।
- PAD_CHAR_TO_FULL_LENGTH SQL मोड।
- AUTO_INCREMENT समर्थन FLOAT और DOUBLE (और किसी भी समानार्थी शब्द) प्रकार के कॉलम के लिए बहिष्कृत है। ऐसे कॉलम से AUTO_INCREMENT विशेषता को हटाने पर विचार करें, या उन्हें एक पूर्णांक प्रकार में बदलें।
- अहस्ताक्षरित विशेषता FLOAT, DOUBLE, और DECIMAL (और किसी भी समानार्थी) प्रकार के कॉलम के लिए बहिष्कृत है। ऐसे कॉलम के लिए एक साधारण CHECK बाधा का उपयोग करने पर विचार करें।
- FLOAT(M,D) और DOUBLE(M,D) सिंटैक्स FLOAT और DOUBLE (और किसी भी समानार्थी शब्द) के कॉलम के लिए अंकों की संख्या निर्दिष्ट करने के लिए एक गैर-मानक MySQL एक्सटेंशन है। यह वाक्यविन्यास बहिष्कृत है।
- गैर-मानक सी-शैली &&, ||, और ! ऑपरेटर जो क्रमशः मानक SQL AND, OR, और NOT ऑपरेटरों के पर्यायवाची हैं, पदावनत कर दिए जाते हैं। गैर-मानक ऑपरेटरों का उपयोग करने वाले अनुप्रयोगों को मानक ऑपरेटरों का उपयोग करने के लिए समायोजित किया जाना चाहिए।
- mysql_upgrad क्लाइंट को हटा दिया गया है क्योंकि mysql सिस्टम स्कीमा में सिस्टम टेबल को अपग्रेड करने की क्षमता और अन्य स्कीमा में ऑब्जेक्ट को MySQL सर्वर में स्थानांतरित कर दिया गया है।
- mysql_upgrad_info फ़ाइल, जो डेटा निर्देशिका बनाई गई है और MySQL संस्करण संख्या को संग्रहीत करने के लिए उपयोग की जाती है।
- relay_log_info_file सिस्टम चर और --मास्टर-जानकारी-फ़ाइल विकल्प बहिष्कृत हैं। पहले, इनका उपयोग रिले लॉग जानकारी लॉग और मास्टर जानकारी लॉग का नाम निर्दिष्ट करने के लिए किया जाता था जब रिले_लॉग_इन्फो_रिपॉजिटरी =फ़ाइल और मास्टर_इन्फो_रिपॉजिटरी =फ़ाइल सेट किए गए थे, लेकिन उन सेटिंग्स को बहिष्कृत कर दिया गया है। रिले लॉग इंफो लॉग और मास्टर इंफो लॉग के लिए फाइलों के उपयोग को क्रैश-सेफ स्लेव टेबल द्वारा हटा दिया गया है, जो कि MySQL 8.0 में डिफ़ॉल्ट हैं।
- MySQL पासवर्ड निर्दिष्ट करने के लिए MYSQL_PWD पर्यावरण चर का उपयोग बहिष्कृत है।
और अब, आइए उन कुछ विशेषताओं पर एक नज़र डालते हैं जिनका उपयोग आपको इस MySQL संस्करण में करना बंद कर देना चाहिए।
MySQL 8.0 में क्या हटाया गया था?
MySQL 8.0 में निम्न सुविधाओं को हटा दिया गया है।
- innodb_locks_unsafe_for_binlog सिस्टम वैरिएबल को हटा दिया गया था। पढ़ें प्रतिबद्ध अलगाव स्तर समान कार्यक्षमता प्रदान करता है।
- उपयोगकर्ता बनाने के लिए GRANT का उपयोग करना। इसके बजाय, उपयोगकर्ता बनाएं का उपयोग करें। इस अभ्यास के बाद NO_AUTO_CREATE_USER SQL मोड को GRANT स्टेटमेंट के लिए महत्वहीन बना देता है, इसलिए इसे भी हटा दिया जाता है, और अब सर्वर लॉग में एक त्रुटि लिखी जाती है जब विकल्प फ़ाइल में sql_mode विकल्प के लिए इस मान की उपस्थिति mysqld को शुरू होने से रोकती है।ली>
- विशेषाधिकार असाइनमेंट के अलावा अन्य खाता संपत्तियों को संशोधित करने के लिए GRANT का उपयोग करना। इसमें प्रमाणीकरण, एसएसएल और संसाधन-सीमा गुण शामिल हैं। इसके बजाय, खाता बनाने के समय क्रिएट यूजर के साथ ऐसी संपत्तियां स्थापित करें या बाद में उन्हें ALTER USER के साथ संशोधित करें।
- उपयोगकर्ता बनाने और अनुदान के लिए पासवर्ड 'auth_string' सिंटैक्स द्वारा पहचाना गया। इसके बजाय, USER और ALTER USER बनाने के लिए auth_plugin AS 'auth_string' के साथ IDENTIFIED का उपयोग करें, जहां 'auth_string' मान नामित प्लगइन के साथ संगत प्रारूप में है।
- पासवर्ड () फ़ंक्शन। इसके अतिरिक्त, PASSWORD() हटाने का अर्थ है कि SET PASSWORD... =PASSWORD('auth_string') सिंटैक्स अब उपलब्ध नहीं है।
- पुराने_पासवर्ड सिस्टम वैरिएबल.
- फ्लश क्वेरी कैश और रीसेट क्वेरी कैश स्टेटमेंट।
- ये सिस्टम वैरिएबल:query_cache_limit, query_cache_min_res_unit, query_cache_size, query_cache_type, query_cache_wlock_invalidate।
- ये स्थिति चर:Qcache_free_blocks, Qcache_free_memory, Qcache_hits, Qcache_inserts, Qcache_lowmem_prunes, Qcache_not_cached, Qcache_queries_in_cache, Qcache_total_blocks।
- ये थ्रेड बताता है:कैश्ड क्वेरी पर विशेषाधिकारों की जाँच करना, क्वेरी के लिए क्वेरी कैश की जाँच करना, क्वेरी कैश प्रविष्टियों को अमान्य करना, क्लाइंट को कैश्ड परिणाम भेजना, क्वेरी कैश में परिणाम संग्रहीत करना, क्वेरी कैश लॉक की प्रतीक्षा करना।
- tx_isolation और tx_read_only सिस्टम चर हटा दिए गए हैं। इसके बजाय transaction_isolation और transaction_read_only का उपयोग करें।
- sync_frm सिस्टम वेरिएबल को हटा दिया गया है क्योंकि .frm फाइलें अप्रचलित हो गई हैं।
- safe_auth सिस्टम वैरिएबल और --secure-auth क्लाइंट विकल्प को हटा दिया गया है। mysql_options() C API फ़ंक्शन के लिए MYSQL_SECURE_AUTH विकल्प हटा दिया गया था।
- log_warnings सिस्टम वेरिएबल और --log-warnings सर्वर विकल्प को हटा दिया गया है। इसके बजाय log_error_verbosity सिस्टम वैरिएबल का उपयोग करें।
- sql_log_bin सिस्टम वैरिएबल का वैश्विक दायरा हटा दिया गया था। sql_log_bin में केवल सत्र का दायरा है, और जो अनुप्रयोग @@GLOBAL.sql_log_bin तक पहुँचने पर निर्भर हैं, उन्हें समायोजित किया जाना चाहिए।
- अप्रयुक्त date_format, datetime_format, time_format, और max_tmp_tables सिस्टम वैरिएबल हटा दिए जाते हैं।
- ग्रुप बाय क्लॉज के लिए बहिष्कृत ASC या DESC क्वालिफायर हटा दिए जाते हैं। क्वेरी जो पहले GROUP BY छँटाई पर निर्भर थीं, वे परिणाम उत्पन्न कर सकती हैं जो पिछले MySQL संस्करणों से भिन्न हैं। किसी दिए गए सॉर्ट ऑर्डर को तैयार करने के लिए, ORDER BY क्लॉज प्रदान करें।
- पार्सर अब \N को SQL कथनों में NULL के पर्यायवाची के रूप में नहीं मानता है। इसके बजाए न्यूल का प्रयोग करें। यह परिवर्तन LOAD DATA या SELECT ... INTO OUTFILE के साथ किए गए टेक्स्ट फ़ाइल आयात या निर्यात संचालन को प्रभावित नहीं करता है, जिसके लिए NULL को \N द्वारा दर्शाया जाना जारी है।
- क्लाइंट-साइड --ssl और --ssl-verify-server-cert विकल्प हटा दिए गए हैं। --ssl=1 या --enable-ssl के बजाय --ssl-mode=REQUIRED का उपयोग करें। --ssl =0, --skip-ssl, या --disable-ssl के बजाय --ssl-mode=DISABLED का उपयोग करें। --ssl-verify-server-cert विकल्पों के बजाय --ssl-mode=VERIFY_IDENTITY का उपयोग करें।
- mysql_install_db प्रोग्राम को MySQL वितरण से हटा दिया गया है। डेटा निर्देशिका आरंभीकरण इसके बजाय --initialize या --initialize-insecure विकल्प के साथ mysqld को लागू करके किया जाना चाहिए। इसके अलावा, mysql_install_db द्वारा उपयोग किए गए mysqld के लिए --bootstrap विकल्प को हटा दिया गया था, और mysql_install_db के लिए इंस्टॉलेशन स्थान को नियंत्रित करने वाले INSTALL_SCRIPTDIR CMake विकल्प को हटा दिया गया था।
- mysql_plugin उपयोगिता को हटा दिया गया था। विकल्पों में सर्वर स्टार्टअप पर --plugin-load या --plugin-load-add विकल्प का उपयोग करके प्लग इन लोड करना शामिल है, या रनटाइम पर INSTALL PLUGIN कथन का उपयोग करना शामिल है।
- रिज़ॉल्विप उपयोगिता हटा दी गई है। इसके बजाय nslookup, host, या dig का उपयोग किया जा सकता है।
कई नई, बहिष्कृत और हटाई गई सुविधाएं हैं। अधिक विस्तृत जानकारी के लिए आप आधिकारिक वेबसाइट देख सकते हैं।
MySQL 8.0 में माइग्रेट करने से पहले विचार
आइए अब इस MySQL संस्करण में माइग्रेट करने से पहले ध्यान देने योग्य कुछ सबसे महत्वपूर्ण बातों का उल्लेख करें।
प्रमाणीकरण विधि
जैसा कि हमने बताया, caching_sha2_password डिफ़ॉल्ट प्रमाणीकरण विधि नहीं है, इसलिए आपको जांचना चाहिए कि आपका एप्लिकेशन/कनेक्टर इसका समर्थन करता है या नहीं। यदि नहीं, तो आइए देखें कि आप डिफ़ॉल्ट प्रमाणीकरण विधि और उपयोगकर्ता प्रमाणीकरण प्लगइन को फिर से 'mysql_native_password' में कैसे बदल सकते हैं।
डिफ़ॉल्ट प्रमाणीकरण विधि बदलने के लिए, my.cnf कॉन्फ़िगरेशन फ़ाइल संपादित करें, और निम्न पंक्ति जोड़ें/संपादित करें:
$ vi /etc/my.cnf
[mysqld]
default_authentication_plugin=mysql_native_password
उपयोगकर्ता प्रमाणीकरण प्लग इन बदलने के लिए, एक विशेषाधिकार प्राप्त उपयोगकर्ता के साथ निम्न आदेश चलाएँ:
$ mysql -p
ALTER USER ‘username’@’hostname’ IDENTIFIED WITH ‘mysql_native_password’ BY ‘password’;
वैसे भी, ये परिवर्तन स्थायी समाधान नहीं हैं क्योंकि पुराने प्रमाणीकरण को जल्द ही हटा दिया जा सकता है, इसलिए आपको भविष्य के डेटाबेस अपग्रेड के लिए इसे ध्यान में रखना चाहिए।
यहां भी भूमिकाएं एक महत्वपूर्ण विशेषता हैं। आप इसे एक भूमिका सौंपने और वहां संबंधित उपयोगकर्ताओं को जोड़ने के लिए अलग-अलग विशेषाधिकारों को कम कर सकते हैं।
उदाहरण के लिए, आप मार्केटिंग और डेवलपर टीमों के लिए एक नई भूमिका बना सकते हैं:
$ mysql -p
CREATE ROLE 'marketing', 'developers';
इन नई भूमिकाओं को विशेषाधिकार सौंपें:
GRANT SELECT ON *.* TO 'marketing';
GRANT ALL PRIVILEGES ON *.* TO 'developers';
और फिर, उपयोगकर्ताओं को भूमिका सौंपें:
GRANT 'marketing' TO 'marketing1'@'%';
GRANT 'marketing' TO 'marketing2'@'%';
GRANT 'developers' TO 'developer1'@'%';
और बस इतना ही। आपको निम्नलिखित विशेषाधिकार प्राप्त होंगे:
SHOW GRANTS FOR 'marketing1'@'%';
+-------------------------------------------+
| Grants for [email protected]% |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `marketing1`@`%` |
| GRANT `marketing`@`%` TO `marketing1`@`%` |
+-------------------------------------------+
2 rows in set (0.00 sec)
SHOW GRANTS FOR 'marketing';
+----------------------------------------+
| Grants for [email protected]% |
+----------------------------------------+
| GRANT SELECT ON *.* TO `marketing`@`%` |
+----------------------------------------+
1 row in set (0.00 sec)
वर्ण समूह
चूंकि नया डिफ़ॉल्ट वर्ण सेट utf8mb4 है, इसलिए आपको यह सुनिश्चित करना चाहिए कि आप डिफ़ॉल्ट वर्ण सेट का उपयोग नहीं कर रहे हैं क्योंकि यह बदल जाएगा।
कुछ समस्याओं से बचने के लिए, आपको my.cnf कॉन्फ़िगरेशन फ़ाइल में character_set_server और collation_server चर निर्दिष्ट करना चाहिए।
$ vi /etc/my.cnf
[mysqld]
character_set_server=latin1
collation_server=latin1_swedish_ci
MyISAM इंजन
MySQL स्कीमा में MySQL विशेषाधिकार तालिकाओं को InnoDB में स्थानांतरित कर दिया गया है। आप एक टेबल इंजन =MyISAM बना सकते हैं, और यह पहले की तरह काम करेगा, लेकिन MyISAM टेबल को चल रहे MySQL सर्वर में कॉपी करने से काम नहीं चलेगा क्योंकि इसे खोजा नहीं जाएगा।
विभाजन करना
कोई विभाजन तालिका नहीं होनी चाहिए जो एक भंडारण इंजन का उपयोग करती है जिसमें मूल विभाजन समर्थन नहीं है। इस बिंदु को सत्यापित करने के लिए आप निम्न क्वेरी चला सकते हैं।
$ mysql -p
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE NOT IN ('innodb', 'ndbcluster') AND CREATE_OPTIONS LIKE '%partitioned%';
यदि आपको किसी तालिका का इंजन बदलने की आवश्यकता है, तो आप चला सकते हैं:
ALTER TABLE table_name ENGINE = INNODB;
अपग्रेड चेक
आखिरी चरण के रूप में, आप mysqlcheck कमांड को चेक-अपग्रेड फ्लैग का उपयोग करके यह पुष्टि करने के लिए चला सकते हैं कि सब कुछ ठीक लग रहा है या नहीं।
$ mysqlcheck -uroot -p --all-databases --check-upgrade
Enter password:
mysql.columns_priv OK
mysql.component OK
mysql.db OK
mysql.default_roles OK
mysql.engine_cost OK
mysql.func OK
mysql.general_log OK
mysql.global_grants OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.password_history OK
mysql.plugin OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.role_edges OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
sys.sys_config OK
world_x.city OK
world_x.country OK
world_x.countryinfo OK
world_x.countrylanguage OK
अपग्रेड करने से पहले जांच करने के लिए कई चीजें हैं। अधिक विस्तृत जानकारी के लिए आप आधिकारिक MySQL दस्तावेज़ देख सकते हैं।
अपग्रेड के तरीके
MySQL 5.7 से 8.0 में अपग्रेड करने के कई तरीके हैं। आप अपग्रेड इन-प्लेस का उपयोग कर सकते हैं या नए संस्करण में प्रतिकृति स्लेव भी बना सकते हैं, ताकि आप इसे बाद में प्रचारित कर सकें।
लेकिन अपग्रेड करने से पहले, चरण 0 को आपके डेटा का बैकअप लेना चाहिए। बैकअप में सिस्टम डेटाबेस सहित सभी डेटाबेस शामिल होने चाहिए। इसलिए, यदि कोई समस्या है, तो आप यथाशीघ्र रोलबैक कर सकते हैं।
उपलब्ध संसाधनों के आधार पर एक अन्य विकल्प, एक कैस्केड प्रतिकृति MySQL 5.7 -> MySQL 8.0 -> MySQL 5.7 बना सकता है, इसलिए नए संस्करण को बढ़ावा देने के बाद, यदि कुछ गलत हो गया, तो आप प्रचार कर सकते हैं पुराने संस्करण के साथ दास नोड वापस। लेकिन यह खतरनाक हो सकता है अगर डेटा में कुछ समस्या थी, इसलिए इसके पहले बैकअप बहुत जरूरी है।
किसी भी विधि का उपयोग करने के लिए, यह सत्यापित करने के लिए एक परीक्षण वातावरण आवश्यक है कि एप्लिकेशन नए MySQL 8.0 संस्करण का उपयोग किए बिना किसी समस्या के काम कर रहा है।
निष्कर्ष
MySQL 8.0 रिलीज़ के 1 साल से अधिक समय के बाद, अपने पुराने MySQL संस्करण को माइग्रेट करने के बारे में सोचना शुरू करने का समय आ गया है, लेकिन सौभाग्य से, MySQL 5.7 के लिए समर्थन की समाप्ति 2023 है, आपके पास माइग्रेशन योजना बनाने और एप्लिकेशन व्यवहार का परीक्षण करने का समय है। बिना जल्दबाजी के। माइग्रेट करने के बाद किसी भी समस्या से बचने के लिए उस परीक्षण चरण में कुछ समय व्यतीत करना आवश्यक है।