MariaDB
 sql >> डेटाबेस >  >> RDS >> MariaDB

WHMCS डेटाबेस को मारियाडीबी गैलेरा क्लस्टर में कैसे माइग्रेट करें

WHMCS वेब होस्टिंग कंपनियों के लिए एक ऑल-इन-वन क्लाइंट प्रबंधन, बिलिंग और समर्थन समाधान है। यह होस्टिंग ऑटोमेशन की दुनिया में अग्रणी है जिसका उपयोग होस्टिंग कंट्रोल पैनल के साथ ही किया जाएगा। WHMCS डेटाबेस प्रदाता के रूप में MySQL/MariaDB के साथ LAMP स्टैक पर चलता है। आमतौर पर, WHMCS को स्वतंत्र रूप से WHMCS इंस्टॉलेशन गाइड का पालन करके, या cPanel साइट सॉफ़्टवेयर या सॉफ्टेकुलस जैसे सॉफ़्टवेयर इंस्टॉलर टूल के माध्यम से एक स्टैंडअलोन इंस्टेंस (एप्लिकेशन और डेटाबेस) के रूप में स्थापित किया जाता है। 3 नोड्स के गैलेरा क्लस्टर में माइग्रेट करके डेटाबेस को अत्यधिक उपलब्ध कराया जा सकता है।

इस ब्लॉग पोस्ट में, हम आपको दिखाएंगे कि डेटाबेस उपलब्धता में सुधार के लिए एक स्टैंडअलोन MySQL सर्वर (स्वयं WHM/cPanel सर्वर द्वारा प्रदान किया गया) से WHMCS डेटाबेस को बाहरी तीन-नोड मारियाडीबी गैलेरा क्लस्टर में कैसे माइग्रेट किया जाए। WHMCS एप्लिकेशन को उसी cPanel सर्वर पर चालू रखा जाएगा। प्रदर्शन को अनुकूलित करने के लिए हम आपको कुछ ट्यूनिंग टिप्स भी देंगे।

डेटाबेस क्लस्टर परिनियोजित करना

  1. ClusterControl स्थापित करें:
    $ whoami
    root
    $ wget https://severalnines.com/downloads/cmon/install-cc
    $ chmod 755 install-cc
    $ ./install-cc
    स्थापना पूर्ण होने तक तदनुसार निर्देशों का पालन करें। फिर, http://192.168.55.50/clustercontrol . पर जाएं (192.168.55.50 क्लस्टरकंट्रोल होस्ट का आईपी पता होने के नाते) और पासवर्ड और अन्य आवश्यक विवरणों के साथ एक सुपर व्यवस्थापक उपयोगकर्ता पंजीकृत करें।
  2. ClusterControl से सभी डेटाबेस नोड्स में पासवर्ड रहित SSH सेटअप करें:
    $ whoami
    root
    $ ssh-keygen -t rsa # Press enter on all prompts
    $ ssh-copy-id 192.168.55.51
    $ ssh-copy-id 192.168.55.52
    $ ssh-copy-id 192.168.55.53
  3. हमारे 3-नोड मारियाडीबी गैलेरा क्लस्टर के लिए डेटाबेस परिनियोजन कॉन्फ़िगर करें। हम नवीनतम समर्थित संस्करण मारियाडीबी 10.3 का उपयोग करने जा रहे हैं: सुनिश्चित करें कि नोड विवरण जोड़ते समय 'एंटर' दबाने के बाद आपको सभी हरे रंग के चेक मिलें। परिनियोजन कार्य पूरा होने तक प्रतीक्षा करें और आपको यह देखना चाहिए कि डेटाबेस क्लस्टर ClusterControl में सूचीबद्ध है।
  4. प्रबंधित करें -> लोड बैलेंसर -> प्रॉक्सीएसक्यूएल -> प्रॉक्सीएसक्यूएल तैनात करें पर जाकर एक प्रॉक्सीएसक्यूएल नोड (हम इसे क्लस्टर कंट्रोल नोड के साथ सह-पता लगाने जा रहे हैं) को तैनात करें। . निम्नलिखित आवश्यक विवरण निर्दिष्ट करें: "डेटाबेस उपयोगकर्ता जोड़ें" के तहत, आप ClusterControl से एक नया ProxySQL और MySQL उपयोगकर्ता बनाने के लिए कह सकते हैं क्योंकि यह सेट हो जाता है , इस प्रकार हम उपयोगकर्ता को "portal_whmcs" के रूप में रखते हैं, जिसे डेटाबेस "portal_whmcs.*" पर सभी विशेषाधिकार दिए गए हैं। फिर, "शामिल करें" के लिए सभी बॉक्स चेक करें और अंत में "क्या आप निहित लेनदेन का उपयोग कर रहे हैं?" के लिए "गलत" चुनें।

परिनियोजन समाप्त होने के बाद, आपको टोपोलॉजी दृश्य के अंतर्गत कुछ इस तरह देखना चाहिए:

संबंधित संसाधन ऑस्ट्रेलिया के शीर्ष होस्टिंग प्रदाता अपने उपयोगकर्ताओं के लिए विश्व स्तरीय अनुभव प्रदान करने के लिए क्लस्टर नियंत्रण का लाभ उठाते हैं MySQL के लिए डेटाबेस लोड संतुलन और ProxySQL के साथ MariaDB - गैलेरा क्लस्टर के साथ cPanel पर ट्यूटोरियल उच्च उपलब्धता MySQL

हमारा डेटाबेस परिनियोजन अब पूरा हो गया है। ध्यान रखें कि हम इस ब्लॉग पोस्ट में लोड बैलेंसर टियर रिडंडेंसी को कवर नहीं करते हैं। आप इसे एक सेकेंडरी लोड बैलेंसर जोड़कर प्राप्त कर सकते हैं और उन्हें Keepalived के साथ एक साथ जोड़ सकते हैं। इसके बारे में अधिक जानने के लिए, अध्याय "4.2. ProxySQL के लिए उच्च उपलब्धता" के अंतर्गत ProxySQL ट्यूटोरियल देखें।

WHMCS इंस्टालेशन

यदि आपके पास पहले से ही WHMCS स्थापित और चल रहा है, तो आप इस चरण को छोड़ सकते हैं।

ध्यान दें कि WHMCS को एक वैध लाइसेंस की आवश्यकता होती है जिसे आपको सॉफ़्टवेयर का उपयोग करने के लिए पहले से खरीदना होगा। वे एक नि:शुल्क परीक्षण लाइसेंस प्रदान नहीं करते हैं, लेकिन वे 30-दिन की मनी-बैक गारंटी के लिए कोई प्रश्न नहीं पूछे जाने की पेशकश करते हैं, जिसका अर्थ है कि आप बिना किसी शुल्क के ऑफ़र समाप्त होने से पहले सदस्यता को हमेशा रद्द कर सकते हैं।

स्थापना प्रक्रिया को सरल बनाने के लिए, हम अपने उप-डोमेन, selfportal.mytest.io में से एक के लिए cPanel साइट सॉफ़्टवेयर (आप WHMCS मैन्युअल इंस्टॉलेशन का विकल्प चुन सकते हैं) का उपयोग करने जा रहे हैं। WHM में अकाउंट बनाने के बाद, cPanel> Software> Site Software> WHMCS पर जाएं। और वेब एप्लिकेशन इंस्टॉल करें। व्यवस्थापक उपयोगकर्ता के रूप में लॉगिन करें और एप्लिकेशन का उपयोग शुरू करने के लिए लाइसेंस को सक्रिय करें।

इस समय, हमारा WHMCS इंस्टेंस एक स्टैंडअलोन सेटअप के रूप में चल रहा है, जो स्थानीय MySQL सर्वर से जुड़ रहा है।

आपके संपूर्ण डेटाबेस इन्फ्रास्ट्रक्चर के लिए ClusterControlSingle कंसोल पता करें कि ClusterControl में और क्या नया है, ClusterControl को निःशुल्क स्थापित करें

WHMCS डेटाबेस को मारियाडीबी गैलेरा क्लस्टर में माइग्रेट करना

एक स्टैंडअलोन MySQL सर्वर पर WHMCS चलाना डेटाबेस के दृष्टिकोण से एप्लिकेशन को सिंगल-पॉइंट-ऑफ-फेलर (SPOF) के लिए उजागर करता है। मारियाडीबी गैलेरा क्लस्टर बिल्ट-इन क्लस्टरिंग सुविधाओं और मल्टी-मास्टर आर्किटेक्चर के लिए समर्थन के साथ डेटा स्तर को अतिरेक प्रदान करता है। इसे एक डेटाबेस लोड बैलेंसर के साथ संयोजित करें, उदाहरण के लिए ProxySQL, और हम WHMCS डेटाबेस उपलब्धता को एप्लिकेशन में बहुत कम परिवर्तनों के साथ सुधार सकते हैं।

हालांकि, गैलेरा क्लस्टर पर कुशलता से काम करने के लिए WHMCS (या अन्य अनुप्रयोगों) को कई सर्वोत्तम अभ्यासों का पालन करना पड़ता है, विशेष रूप से:

  • सभी टेबल InnoDB/XtraDB स्टोरेज इंजन पर चलने चाहिए।
  • सभी तालिकाओं में एक प्राथमिक कुंजी परिभाषित होनी चाहिए (बहु-स्तंभ प्राथमिक कुंजी समर्थित है, अद्वितीय कुंजी की गणना नहीं की जाती है)।

स्थापित संस्करण के आधार पर, हमारे परीक्षण पर्यावरण स्थापना (cPanel/WHM 11.78.0.23, WHMCS 7.6.0 साइट सॉफ़्टवेयर के माध्यम से) में, उपरोक्त दो बिंदु आवश्यकता को पूरा नहीं करते थे। डिफ़ॉल्ट cPanel/WHM MySQL कॉन्फ़िगरेशन /etc/my.cnf के अंदर निम्न पंक्ति के साथ आता है:

default-storage-engine=MyISAM

उपरोक्त WHMCS Addon मॉड्यूल द्वारा प्रबंधित अतिरिक्त तालिकाओं को MyISAM स्टोरेज इंजन प्रारूप में बनाए जाने का कारण बनेगा यदि वे मॉड्यूल सक्षम हैं। 2 मॉड्यूल (नए टीएलडी और स्टाफ नोटिसबोर्ड) को सक्षम करने के बाद स्टोरेज इंजन का आउटपुट यहां दिया गया है:

MariaDB> SELECT tables.table_schema, tables.table_name, tables.engine FROM information_schema.tables WHERE tables.table_schema='whmcsdata_whmcs' and tables.engine <> 'InnoDB';
+-----------------+----------------------+--------+
| table_schema    | table_name           | engine |
+-----------------+----------------------+--------+
| whmcsdata_whmcs | mod_enomnewtlds      | MyISAM |
| whmcsdata_whmcs | mod_enomnewtlds_cron | MyISAM |
| whmcsdata_whmcs | mod_staffboard       | MyISAM |
+-----------------+----------------------+--------+

MyISAM समर्थन गैलेरा में प्रयोगात्मक है, जिसका अर्थ है कि आपको इसे उत्पादन में नहीं चलाना चाहिए। कुछ बदतर मामलों में, यह डेटा स्थिरता से समझौता कर सकता है और इसकी गैर-लेन-देन प्रकृति के कारण राइटसेट प्रतिकृति विफलताओं का कारण बन सकता है।

एक अन्य महत्वपूर्ण बिंदु यह है कि प्रत्येक तालिका में एक प्राथमिक कुंजी परिभाषित होनी चाहिए। आपके द्वारा निष्पादित WHMCS स्थापना प्रक्रिया के आधार पर (जैसा कि हमारे लिए, हमने WHMCS को स्थापित करने के लिए cPanel साइट सॉफ़्टवेयर का उपयोग किया था), इंस्टॉलर द्वारा बनाई गई कुछ तालिकाएँ प्राथमिक कुंजी के साथ नहीं आती हैं, जैसा कि निम्न आउटपुट में दिखाया गया है:

MariaDB [information_schema]> SELECT TABLES.table_schema, TABLES.table_name FROM TABLES LEFT JOIN KEY_COLUMN_USAGE AS c ON (TABLES.TABLE_NAME = c.TABLE_NAME AND c.CONSTRAINT_SCHEMA = TABLES.TABLE_SCHEMA AND c.constraint_name = 'PRIMARY' ) WHERE TABLES.table_schema <> 'information_schema' AND TABLES.table_schema <> 'performance_schema' AND TABLES.table_schema <> 'mysql' and TABLES.table_schema <> 'sys' AND c.constraint_name IS NULL;
+-----------------+------------------------------------+
| table_schema    | table_name                         |
+-----------------+------------------------------------+
| whmcsdata_whmcs | mod_invoicedata                    |
| whmcsdata_whmcs | tbladminperms                      |
| whmcsdata_whmcs | tblaffiliates                      |
| whmcsdata_whmcs | tblconfiguration                   |
| whmcsdata_whmcs | tblknowledgebaselinks              |
| whmcsdata_whmcs | tbloauthserver_access_token_scopes |
| whmcsdata_whmcs | tbloauthserver_authcode_scopes     |
| whmcsdata_whmcs | tbloauthserver_client_scopes       |
| whmcsdata_whmcs | tbloauthserver_user_authz_scopes   |
| whmcsdata_whmcs | tblpaymentgateways                 |
| whmcsdata_whmcs | tblproductconfiglinks              |
| whmcsdata_whmcs | tblservergroupsrel                 |
+-----------------+------------------------------------+

एक साइड नोट के रूप में, गैलेरा अभी भी प्राथमिक कुंजी के बिना तालिकाओं को मौजूद रहने की अनुमति देगा। हालांकि, उन तालिकाओं पर DELETE संचालन समर्थित नहीं हैं और यह आपको नोड क्रैश, राइटसेट प्रमाणन प्रदर्शन गिरावट या पंक्तियों को अलग-अलग नोड्स पर एक अलग क्रम में दिखाई देने जैसी बड़ी समस्याओं के लिए उजागर करेगा।

इसे दूर करने के लिए, हमारी माइग्रेशन योजना में स्टोरेज इंजन और स्कीमा संरचना को ठीक करने के लिए अतिरिक्त चरण शामिल होना चाहिए, जैसा कि अगले भाग में दिखाया गया है।

माइग्रेशन प्लान

पिछले अध्याय में बताए गए प्रतिबंधों के कारण, हमारी माइग्रेशन योजना कुछ इस तरह होनी चाहिए:

  1. WHMCS रखरखाव मोड सक्षम करें
  2. तार्किक बैकअप का उपयोग करके whmcs डेटाबेस का बैकअप लें
  3. गैलेरा आवश्यकता (कन्वर्ट स्टोरेज इंजन) को पूरा करने के लिए डंप फ़ाइलों को संशोधित करें
  4. गैलेरा नोड्स में से एक को ऊपर लाएं और शेष नोड्स को बंद होने दें
  5. चुने गए गैलेरा नोड को पुनर्स्थापित करें
  6. गैलेरा आवश्यकता को पूरा करने के लिए स्कीमा संरचना को ठीक करें (प्राथमिक कुंजी अनुपलब्ध)
  7. चुने गए गैलेरा नोड से क्लस्टर को बूटस्ट्रैप करें
  8. दूसरा नोड शुरू करें और इसे सिंक होने दें
  9. तीसरा नोड शुरू करें और इसे सिंक होने दें
  10. उपयुक्त समापन बिंदु की ओर इशारा करते हुए डेटाबेस को बदलें
  11. WHMCS रखरखाव मोड अक्षम करें

नई वास्तुकला को नीचे के रूप में चित्रित किया जा सकता है:

cPanel सर्वर पर हमारा WHMCS डेटाबेस नाम "whmcsdata_whmcs" है और हम इस डेटाबेस को ClusterControl द्वारा तैनात एक बाहरी तीन-नोड मारियाडीबी गैलेरा क्लस्टर में माइग्रेट करने जा रहे हैं। डेटाबेस सर्वर के शीर्ष पर, हमारे पास एक प्रॉक्सीएसक्यूएल (क्लस्टरकंट्रोल के साथ सह-पता लगाने) है जो मारियाडीबी लोड बैलेंसर के रूप में कार्य करने के लिए चल रहा है, जो हमारे WHMCS उदाहरण को एकल समापन बिंदु प्रदान करता है। क्लस्टर पर डेटाबेस नाम को इसके बजाय "portal_whmcs" में बदल दिया जाएगा, ताकि हम इसे आसानी से अलग कर सकें।

सबसे पहले, WHMCS> सेटअप> सामान्य सेटिंग्स> सामान्य> रखरखाव मोड> सक्षम करने के लिए टिक करें - सक्षम होने पर क्लाइंट क्षेत्र की पहुंच को रोकता है पर जाकर साइट-व्यापी रखरखाव मोड को सक्षम करें। . यह सुनिश्चित करेगा कि डेटाबेस बैकअप ऑपरेशन के दौरान अंतिम उपयोगकर्ता की ओर से कोई गतिविधि नहीं होगी।

चूंकि हमें गैलेरा में अच्छी तरह फिट होने के लिए स्कीमा संरचना में मामूली संशोधन करना पड़ता है, इसलिए दो अलग डंप फाइलें बनाना एक अच्छा विचार है। एक केवल स्कीमा के साथ और दूसरा केवल डेटा के लिए। WHM सर्वर पर, निम्न कमांड को रूट के रूप में चलाएँ:

$ mysqldump --no-data -uroot whmcsdata_whmcs > whmcsdata_whmcs_schema.sql
$ mysqldump --no-create-info -uroot whmcsdata_whmcs > whmcsdata_whmcs_data.sql

फिर, हमें स्कीमा डंप फ़ाइल में सभी MyISAM घटनाओं को 'InnoDB' से बदलना होगा:

$ sed -i 's/MyISAM/InnoDB/g' whmcsdata_whmcs_schema.sql

सत्यापित करें कि डंप फ़ाइल में अब हमारे पास MyISAM लाइनें नहीं हैं (इसे कुछ भी नहीं लौटाना चाहिए):

$ grep -i 'myisam' whmcsdata_whmcs_schema.sql

डंप फ़ाइलों को WHM सर्वर से mariadb1 (192.168.55.51) में स्थानांतरित करें:

$ scp whmcsdata_whmcs_* 192.168.55.51:~

MySQL डेटाबेस बनाएँ। ClusterControl से, प्रबंधित करें -> स्कीमा और उपयोगकर्ता -> डेटाबेस बनाएं . पर जाएं और डेटाबेस का नाम निर्दिष्ट करें। यहां हम "portal_whmcs" नामक एक अलग डेटाबेस नाम का उपयोग करते हैं। अन्यथा, आप निम्न कमांड के साथ मैन्युअल रूप से डेटाबेस बना सकते हैं:

$ mysql -uroot -p 
MariaDB> CREATE DATABASE 'portal_whmcs';

इस डेटाबेस के लिए इसके विशेषाधिकारों के साथ एक MySQL उपयोगकर्ता बनाएँ। ClusterControl से, प्रबंधित करें -> स्कीमा और उपयोगकर्ता -> उपयोगकर्ता -> नया उपयोगकर्ता बनाएं पर जाएं और निम्नलिखित निर्दिष्ट करें:

यदि आप मैन्युअल रूप से MySQL उपयोगकर्ता बनाना चुनते हैं, तो निम्न कथन चलाएँ:

$ mysql -uroot -p 
MariaDB> CREATE USER 'portal_whmcs'@'%' IDENTIFIED BY 'ghU51CnPzI9z';
MariaDB> GRANT ALL PRIVILEGES ON portal_whmcs.* TO [email protected]'%';

ध्यान दें कि WHMCS एप्लिकेशन को लोड बैलेंसर के विरुद्ध प्रमाणित करने की अनुमति देने के लिए बनाए गए डेटाबेस उपयोगकर्ता को ProxySQL में आयात किया जाना है। नोड्स पर जाएं -> ProxySQL नोड चुनें -> उपयोगकर्ता -> उपयोगकर्ता आयात करें और "portal_whmcs"@"%" चुनें, जैसा कि निम्न स्क्रीनशॉट में दिखाया गया है:

अगली विंडो (उपयोगकर्ता सेटिंग्स) में, होस्टग्रुप 10 को डिफ़ॉल्ट होस्टग्रुप के रूप में निर्दिष्ट करें:

अब बहाली की तैयारी का चरण पूरा हो गया है।

गैलेरा में, एकल-नोड क्लस्टर पर mysqldump के माध्यम से एक बड़े डेटाबेस को पुनर्स्थापित करना अधिक कुशल है, और इससे पुनर्स्थापना समय में काफी सुधार होता है। अन्यथा, क्लस्टर के प्रत्येक नोड को mysqldump इनपुट से प्रत्येक स्टेटमेंट को प्रमाणित करना होगा, जिसे पूरा होने में अधिक समय लगेगा।

चूंकि हमारे पास पहले से ही तीन-नोड मारियाडीबी गैलेरा क्लस्टर चल रहा है, आइए मारियाडीबी 2 और मारियाडब 3 पर MySQL सेवा को एक बार में एक सुंदर पैमाने के लिए बंद कर दें। डेटाबेस नोड्स को बंद करने के लिए, ClusterControl से, बस नोड्स -> नोड क्रियाएँ -> स्टॉप नोड -> आगे बढ़ें पर जाएँ। . यहाँ आप ClusterControl डैशबोर्ड से देखेंगे, जहाँ क्लस्टर का आकार 1 है और db1 की स्थिति समन्वयित और प्राथमिक है:

फिर, mariadb1 (192.168.55.51) पर, तदनुसार स्कीमा और डेटा को पुनर्स्थापित करें:

$ mysql -uportal_whmcs -p portal_whmcs < whmcsdata_whmcs_schema.sql
$ mysql -uportal_whmcs -p portal_whmcs < whmcsdata_whmcs_data.sql

एक बार आयात करने के बाद, हमें आवश्यक "आईडी" कॉलम (तालिका "tblaffiliates" को छोड़कर) को जोड़ने के लिए तालिका संरचना को ठीक करना होगा और साथ ही उन सभी तालिकाओं पर प्राथमिक कुंजी जोड़ना होगा जिनमें कोई भी गायब है:

$ mysql -uportal_whmcs -p
MariaDB> USE portal_whmcs;
MariaDB [portal_whmcs]> ALTER TABLE `tblaffiliates` ADD PRIMARY KEY (id);
MariaDB [portal_whmcs]> ALTER TABLE `mod_invoicedata` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
MariaDB [portal_whmcs]> ALTER TABLE `tbladminperms` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
MariaDB [portal_whmcs]> ALTER TABLE `tblconfiguration` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
MariaDB [portal_whmcs]> ALTER TABLE `tblknowledgebaselinks` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
MariaDB [portal_whmcs]> ALTER TABLE `tbloauthserver_access_token_scopes` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
MariaDB [portal_whmcs]> ALTER TABLE `tbloauthserver_authcode_scopes` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
MariaDB [portal_whmcs]> ALTER TABLE `tbloauthserver_client_scopes` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
MariaDB [portal_whmcs]> ALTER TABLE `tbloauthserver_user_authz_scopes` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
MariaDB [portal_whmcs]> ALTER TABLE `tblpaymentgateways` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
MariaDB [portal_whmcs]> ALTER TABLE `tblproductconfiglinks` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
MariaDB [portal_whmcs]> ALTER TABLE `tblservergroupsrel` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

या, हम बैश स्क्रिप्ट में लूप का उपयोग करके उपरोक्त दोहराए गए कथनों का अनुवाद कर सकते हैं:

#!/bin/bash

db_user='portal_whmcs'
db_pass='ghU51CnPzI9z'
db_whmcs='portal_whmcs'
tables=$(mysql -u${db_user} "-p${db_pass}"  information_schema -A -Bse "SELECT TABLES.table_name FROM TABLES LEFT JOIN KEY_COLUMN_USAGE AS c ON (TABLES.TABLE_NAME = c.TABLE_NAME AND c.CONSTRAINT_SCHEMA = TABLES.TABLE_SCHEMA AND c.constraint_name = 'PRIMARY' ) WHERE TABLES.table_schema <> 'information_schema' AND TABLES.table_schema <> 'performance_schema' AND TABLES.table_schema <> 'mysql' and TABLES.table_schema <> 'sys' AND c.constraint_name IS NULL;")
mysql_exec="mysql -u${db_user} -p${db_pass} $db_whmcs -e"

for table in $tables
do
        if [ "${table}" = "tblaffiliates" ]
        then
                $mysql_exec "ALTER TABLE ${table} ADD PRIMARY KEY (id)";
        else
                $mysql_exec "ALTER TABLE ${table} ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST";
        fi
done

इस बिंदु पर, शेष नोड्स को mariadb1 के साथ सिंक करने के लिए प्रारंभ करना सुरक्षित है। नोड्स पर जाकर mariadb2 से प्रारंभ करें -> db2 चुनें -> नोड क्रियाएँ -> नोड प्रारंभ करें . नौकरी की प्रगति की निगरानी करें और सुनिश्चित करें कि mariadb3 शुरू करने से पहले mariadb2 सिंक और प्राथमिक स्थिति में है (विवरण के लिए अवलोकन पृष्ठ की निगरानी करें)।

अंत में, WHMCS कॉन्फ़िगरेशन फ़ाइल के अंदर पोर्ट 6033 पर ProxySQL होस्ट को इंगित करने वाले डेटाबेस को बदलें, क्योंकि हमारे मामले में यह /home/whmcsdata/public_html/configuration.php:

पर स्थित है।
$ vim configuration.php
<?php
$license = 'WHMCS-XXXXXXXXXXXXXXXXXXXX';
$templates_compiledir = 'templates_c';
$mysql_charset = 'utf8';
$cc_encryption_hash = 'gLg4oxuOWsp4bMleNGJ--------30IGPnsCS49jzfrKjQpwaN';
$db_host = 192.168.55.50;
$db_port = '6033';
$db_username = 'portal_whmcs';
$db_password = 'ghU51CnPzI9z';
$db_name = 'portal_whmcs';

$customadminpath = 'admin2d27';

WHMCS> सेटअप> सामान्य सेटिंग्स> सामान्य> रखरखाव मोड> पर जाकर WHMCS रखरखाव मोड को अक्षम करना न भूलें "सक्षम करने के लिए टिक करें - सक्षम होने पर क्लाइंट क्षेत्र की पहुंच को रोकता है" . हमारा डेटाबेस माइग्रेशन अभ्यास अब पूरा हो गया है।

परीक्षण और ट्यूनिंग

आप Nodes -> ProxySQL -> शीर्ष क्वेरी के अंतर्गत ProxySQL की क्वेरी प्रविष्टियों को देखकर सत्यापित कर सकते हैं कि क्या :

सबसे अधिक बार-बार पढ़ने योग्य प्रश्नों के लिए (आप उन्हें काउंट स्टार द्वारा क्रमबद्ध कर सकते हैं), आप प्रतिक्रिया समय में सुधार करने और बैकएंड सर्वर पर हिट की संख्या को कम करने के लिए उन्हें कैश कर सकते हैं। बस किसी भी क्वेरी के लिए रोलओवर करें और कैश क्वेरी पर क्लिक करें, और निम्न पॉप-अप दिखाई देगा:

आपको केवल गंतव्य होस्टग्रुप चुनना है और "नियम जोड़ें" पर क्लिक करना है। फिर आप सत्यापित कर सकते हैं कि कैश्ड क्वेरी "नियम" टैब के अंतर्गत हिट हुई है या नहीं:

क्वेरी नियम से ही, हम बता सकते हैं कि पढ़ता है (चयन को छोड़कर सभी चुनें .. अद्यतन के लिए) होस्टग्रुप 20 को अग्रेषित किया जाता है जहां कनेक्शन सभी नोड्स को वितरित किए जाते हैं जबकि लिखते समय (चयन के अलावा) होस्टग्रुप 10 को अग्रेषित किया जाता है, जहां कनेक्शन केवल एक गैलेरा नोड को अग्रेषित किया जाता है। यह कॉन्फ़िगरेशन मल्टी-मास्टर सेटअप के कारण होने वाले डेडलॉक के जोखिम को कम करता है, जो समग्र रूप से प्रतिकृति प्रदर्शन को बेहतर बनाता है।

अभी के लिए बस इतना ही। हैप्पी क्लस्टरिंग!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मारियाडीबी में दिनांक और समय कार्यों के लिए उपयोग की जाने वाली भाषा लौटाएं

  2. मूडल डेटाबेस को स्केल करना

  3. ClusterControl का उपयोग करके MySQL प्रतिकृति समस्याओं से निपटना

  4. कैसे UUID_SHORT () मारियाडीबी में काम करता है

  5. मारियाडीबी CURRENT_TIME() समझाया गया