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

एक क्लोन प्लगइन का उपयोग करके एक MySQL 8.0 प्रतिकृति दास का पुनर्निर्माण

MySQL 8.0 के साथ Oracle ने विकास के लिए एक नया दृष्टिकोण अपनाया। प्रमुख संस्करणों के साथ सुविधाओं को आगे बढ़ाने के बजाय, लगभग हर छोटा MySQL 8.0 संस्करण नई सुविधाओं या सुधारों के साथ आता है। इन नई सुविधाओं में से एक वह है जिस पर हम इस ब्लॉग पोस्ट में ध्यान केंद्रित करना चाहेंगे।

ऐतिहासिक रूप से MySQL प्रावधान के लिए अच्छे टूल के साथ नहीं आया था। ज़रूर, आपके पास mysqldump था, लेकिन यह सिर्फ एक तार्किक बैकअप उपकरण है, जो वास्तव में बड़े वातावरण के लिए उपयुक्त नहीं है। MySQL एंटरप्राइज़ उपयोगकर्ता MySQL एंटरप्राइज़ बैकअप से लाभान्वित हो सकते हैं जबकि समुदाय उपयोगकर्ता xtrabackup का उपयोग कर सकते हैं। हालांकि उनमें से कोई भी स्वच्छ MySQL समुदाय परिनियोजन के साथ नहीं आया था। यह काफी कष्टप्रद था क्योंकि प्रावधान करना एक ऐसा कार्य है जिसे आप अक्सर करते हैं। आपको एक नया दास बनाने की आवश्यकता हो सकती है, एक विफल एक का पुनर्निर्माण करना - इन सभी के लिए अलग-अलग नोड्स के बीच किसी प्रकार के डेटा स्थानांतरण की आवश्यकता होगी।

MySQL 8.0.17 ने MySQL डेटा - क्लोन प्लगइन के प्रावधान का एक नया तरीका पेश किया। इसका उद्देश्य MySQL समूह प्रतिकृति को ध्यान में रखते हुए विफल नोड्स के स्वत:प्रावधान और पुनर्निर्माण का एक तरीका पेश करना था, लेकिन इसकी उपयोगिता उस क्षेत्र तक सीमित नहीं है। हम इसका उपयोग दास नोड के पुनर्निर्माण या एक नए सर्वर का प्रावधान करने के लिए भी कर सकते हैं। इस ब्लॉग पोस्ट में हम आपको दिखाना चाहते हैं कि MySQL क्लोन प्लगइन कैसे सेट करें और एक प्रतिकृति दास का पुनर्निर्माण कैसे करें।

सबसे पहले, प्लगइन को सक्षम करना होगा क्योंकि यह डिफ़ॉल्ट रूप से अक्षम है। एक बार ऐसा करने के बाद, यह पुनरारंभ के माध्यम से सक्षम रहेगा। आदर्श रूप से, आप इसे प्रतिकृति टोपोलॉजी के सभी नोड्स पर करेंगे।

mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';

Query OK, 0 rows affected (0.00 sec)

क्लोन प्लगइन के लिए उचित विशेषाधिकारों के साथ MySQL उपयोगकर्ता की आवश्यकता होती है। डोनर पर इसे "BACKUP_ADMIN" विशेषाधिकार होना चाहिए जबकि जॉइनर पर इसे "CLONE_ADMIN" विशेषाधिकार होना चाहिए। यह मानते हुए कि आप क्लोन प्लगइन का व्यापक रूप से उपयोग करना चाहते हैं, आप केवल दोनों विशेषाधिकारों के साथ उपयोगकर्ता बना सकते हैं। इसे मास्टर पर करें ताकि उपयोगकर्ता सभी दासों पर भी बनाया जा सके। आखिरकार, आप कभी नहीं जानते कि भविष्य में कौन सा नोड मास्टर होगा इसलिए सब कुछ पहले से तैयार करना अधिक सुविधाजनक है।

mysql> CREATE USER [email protected]'%' IDENTIFIED BY 'clonepass';

Query OK, 0 rows affected (0.01 sec)

mysql> GRANT BACKUP_ADMIN, CLONE_ADMIN ON *.* to [email protected]'%';

Query OK, 0 rows affected (0.00 sec)

MySQL क्लोन प्लगइन में कुछ पूर्वापेक्षाएँ हैं इसलिए विवेक जाँच की जानी चाहिए। आपको यह सुनिश्चित करना चाहिए कि निम्न कॉन्फ़िगरेशन चरों में दाता और योजक दोनों का मान समान होगा:

mysql> SHOW VARIABLES LIKE 'innodb_page_size';

+------------------+-------+

| Variable_name    | Value |

+------------------+-------+

| innodb_page_size | 16384 |

+------------------+-------+

1 row in set (0.01 sec)

mysql> SHOW VARIABLES LIKE 'innodb_data_file_path';

+-----------------------+-------------------------+

| Variable_name         | Value   |

+-----------------------+-------------------------+

| innodb_data_file_path | ibdata1:100M:autoextend |

+-----------------------+-------------------------+

1 row in set (0.01 sec)

mysql> SHOW VARIABLES LIKE 'max_allowed_packet';

+--------------------+-----------+

| Variable_name      | Value |

+--------------------+-----------+

| max_allowed_packet | 536870912 |

+--------------------+-----------+

1 row in set (0.00 sec)

mysql> SHOW GLOBAL VARIABLES LIKE '%character%';

+--------------------------+--------------------------------+

| Variable_name            | Value       |

+--------------------------+--------------------------------+

| character_set_client     | utf8mb4       |

| character_set_connection | utf8mb4                        |

| character_set_database   | utf8mb4       |

| character_set_filesystem | binary                         |

| character_set_results    | utf8mb4       |

| character_set_server     | utf8mb4       |

| character_set_system     | utf8       |

| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |

+--------------------------+--------------------------------+

8 rows in set (0.00 sec)



mysql> SHOW GLOBAL VARIABLES LIKE '%collation%';

+-------------------------------+--------------------+

| Variable_name                 | Value |

+-------------------------------+--------------------+

| collation_connection          | utf8mb4_0900_ai_ci |

| collation_database            | utf8mb4_0900_ai_ci |

| collation_server              | utf8mb4_0900_ai_ci |

| default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci |

+-------------------------------+--------------------+

4 rows in set (0.00 sec)

फिर, मास्टर पर, हमें दोबारा जांच करनी चाहिए कि पूर्ववत करें टेबलस्पेस के अद्वितीय नाम हैं:

mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES

    ->        WHERE FILE_TYPE LIKE 'UNDO LOG';

+-----------------+------------+

| TABLESPACE_NAME | FILE_NAME  |

+-----------------+------------+

| innodb_undo_001 | ./undo_001 |

| innodb_undo_002 | ./undo_002 |

+-----------------+------------+

2 rows in set (0.12 sec)

डिफ़ॉल्ट वर्बोसिटी स्तर क्लोनिंग प्रक्रिया के संबंध में बहुत अधिक डेटा नहीं दिखाता है, इसलिए जो हो रहा है उसकी बेहतर जानकारी के लिए हम इसे बढ़ाने की अनुशंसा करेंगे:

mysql> SET GLOBAL log_error_verbosity=3;

Query OK, 0 rows affected (0.00 sec)

हमारे जॉइनर पर प्रक्रिया शुरू करने में सक्षम होने के लिए, हमें एक वैध दाता को कॉन्फ़िगर करना होगा:

mysql> SET GLOBAL clone_valid_donor_list ='10.0.0.101:3306';

Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'clone_valid_donor_list';

+------------------------+-----------------+

| Variable_name          | Value |

+------------------------+-----------------+

| clone_valid_donor_list | 10.0.0.101:3306 |

+------------------------+-----------------+

1 row in set (0.00 sec)

एक बार यह स्थापित हो जाने के बाद, हम इसका उपयोग डेटा की प्रतिलिपि बनाने के लिए कर सकते हैं:

mysql> CLONE INSTANCE FROM 'clone_user'@'10.0.0.101':3306 IDENTIFIED BY 'clonepass';

Query OK, 0 rows affected (18.30 sec)

बस, जॉइनर पर MySQL त्रुटि लॉग में प्रगति को ट्रैक किया जा सकता है। एक बार सब कुछ तैयार हो जाने के बाद, आपको केवल प्रतिकृति को सेटअप करना है:

mysql> CHANGE MASTER TO MASTER_HOST='10.0.0.101', MASTER_AUTO_POSITION=1;

Query OK, 0 rows affected (0.05 sec)

mysql> START SLAVE USER='rpl_user' PASSWORD='afXGK2Wk8l';

Query OK, 0 rows affected, 1 warning (0.01 sec)

कृपया ध्यान रखें कि क्लोन प्लगइन कुछ सीमाओं के साथ आता है। शुरुआत के लिए, यह केवल InnoDB तालिकाओं को स्थानांतरित करता है, इसलिए यदि आप किसी अन्य स्टोरेज इंजन का उपयोग करते हैं, तो आपको या तो उन्हें InnoDB में बदलना होगा या किसी अन्य प्रावधान विधि का उपयोग करना होगा। यह डेटा डेफिनिशन लैंग्वेज में भी हस्तक्षेप करता है - ALTERs ब्लॉक हो जाएंगे और क्लोनिंग ऑपरेशंस से ब्लॉक हो जाएंगे।

डिफ़ॉल्ट रूप से क्लोनिंग एन्क्रिप्टेड नहीं है, इसलिए इसका उपयोग केवल एक सुरक्षित वातावरण में किया जा सकता है। यदि आवश्यक हो, तो आप यह सुनिश्चित करके क्लोनिंग प्रक्रिया के लिए एसएसएल एन्क्रिप्शन सेट कर सकते हैं कि दाता ने एसएसएल कॉन्फ़िगर किया है और फिर जॉइनर पर निम्नलिखित चर परिभाषित करें:

clone_ssl_ca=/path/to/ca.pem

clone_ssl_cert=/path/to/client-cert.pem

clone_ssl_key=/path/to/client-key.pem

फिर, आपको “REQUIRE SSL;” जोड़ना होगा क्लोन कमांड के अंत में और प्रक्रिया को एसएसएल एन्क्रिप्शन के साथ निष्पादित किया जाएगा। कृपया ध्यान रखें कि डेटा-एट-रेस्ट एन्क्रिप्शन सक्षम वाले डेटाबेस को क्लोन करने का यही एकमात्र तरीका है।

जैसा कि हमने शुरुआत में उल्लेख किया था, क्लोनिंग, सबसे अधिक संभावना है, MySQL समूह प्रतिकृति/InnoDB क्लस्टर के साथ दिमाग में डिजाइन किया गया था, लेकिन जब तक सीमाएं विशेष उपयोग के मामले को प्रभावित नहीं कर रही हैं, तब तक इसका उपयोग किया जा सकता है किसी भी MySQL इंस्टेंस को प्रोविज़न करने का मूल तरीका। हम देखेंगे कि इसे अपनाने का दायरा कितना व्यापक होगा - संभावनाएं असंख्य हैं। जो पहले से ही बढ़िया है वह यह है कि अब हमारे पास एक और हार्डवेयर-अज्ञेय पद्धति है जिसका उपयोग हम Xtrabackup के अलावा सर्वर को प्रोविजन करने के लिए कर सकते हैं। प्रतिस्पर्धा हमेशा अच्छी होती है और हम यह देखने के लिए उत्सुक हैं कि भविष्य में क्या होगा।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jQuery UI सॉर्ट करने योग्य, फिर डेटाबेस में ऑर्डर लिखें

  2. mysqli या PDO - पेशेवरों और विपक्ष क्या हैं?

  3. MySQL में अग्रणी और अनुगामी वर्ण कैसे निकालें?

  4. प्रोपराइटरी से ओपन सोर्स डेटाबेस में माइग्रेट करने के लिए टिप्स

  5. जब लोग पंजीकरण करते हैं तो डुप्लिकेट उपयोगकर्ता नाम कैसे रोकें?