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

MySQL के लिए Google क्लाउड SQL को ऑन-प्रेम सर्वर पर माइग्रेट करना

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

यह ब्लॉग पोस्ट आपको Google क्लाउड SQL से ऑन-प्रिमाइसेस सर्वर पर ऑनलाइन माइग्रेशन करने के तरीके के बारे में बताएगी। ऑन-प्रिमाइसेस सर्वर पर हमारा लक्षित डेटाबेस एक डेबियन सर्वर है, लेकिन चरण और प्रक्रियाएं लिनक्स के अन्य संस्करणों के साथ-साथ तब तक लागू होंगी जब तक कि पैकेज ठीक से स्थापित नहीं हो जाते।

हमारा Google क्लाउड MySQL इंस्टेंस MySQL 5.7 पर चल रहा है और हमें इसकी आवश्यकता है:

  • मास्टर पर बनाया गया एक प्रतिकृति दास उपयोगकर्ता।
  • दास को मास्टर के समान प्रमुख संस्करण के साथ स्थापित किया जाना चाहिए।
  • सुरक्षा कारणों से भौगोलिक प्रतिकृति के लिए SSL सक्षम होना चाहिए।

चूंकि Google क्लाउड डिफ़ॉल्ट रूप से MySQL के लिए GTID प्रतिकृति को सक्षम करता है, हम इस प्रतिकृति योजना के आधार पर एक माइग्रेशन करने जा रहे हैं। इसलिए, इस पोस्ट में वर्णित निर्देश MySQL 8.0 उदाहरणों में भी काम करना चाहिए।

प्रतिकृति दास उपयोगकर्ता बनाना

सबसे पहले, हमें अपने Google क्लाउड SQL इंस्टेंस पर एक प्रतिकृति दास उपयोगकर्ता बनाना होगा। Google क्लाउड प्लेटफ़ॉर्म में लॉग इन करें -> डेटाबेस -> SQL -> MySQL इंस्टेंस चुनें -> उपयोगकर्ता -> उपयोगकर्ता खाता जोड़ें और आवश्यक विवरण दर्ज करें:

202.187.194.255 स्लेव पब्लिक आईपी एड्रेस है जो हमारे ऑन- परिसर जो इस उदाहरण से दोहराने जा रहा है। जैसा कि आप देख सकते हैं, कोई विशेषाधिकार कॉन्फ़िगरेशन नहीं है क्योंकि इस इंटरफ़ेस से बनाए गए उपयोगकर्ताओं के पास उच्चतम विशेषाधिकार होंगे जो Google क्लाउड SQL प्रदान कर सकता है (सुपर और फ़ाइल को छोड़कर लगभग सब कुछ)। विशेषाधिकारों को सत्यापित करने के लिए, हम निम्नलिखित कमांड का उपयोग कर सकते हैं:

mysql> SHOW GRANTS FOR [email protected]\G
*************************** 1. row ***************************
Grants for [email protected]: GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, 
DROP, RELOAD, SHUTDOWN, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, 
CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, 
CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, 
CREATE TABLESPACE ON *.* TO 'slave'@'202.187.194.255' WITH GRANT OPTION

ऐसा लगता है कि हमारे दास उपयोगकर्ता के पास दास (प्रतिकृति दास) के रूप में चलाने के लिए आवश्यक अनुमति है।

एक mysqldump बैकअप लेना

बाहरी mysqldump बैकअप बनाने से पहले, हमें क्लाइंट के SSL प्रमाणपत्रों को कॉन्फ़िगर करने की आवश्यकता है क्योंकि सार्वजनिक नेटवर्क के माध्यम से इंस्टेंस को जोड़ने का जोखिम है। ऐसा करने के लिए, कनेक्शन पर जाएं -> एसएसएल क्लाइंट प्रमाणपत्र कॉन्फ़िगर करें -> क्लाइंट प्रमाणपत्र बनाएं:

उपरोक्त फाइलों को डाउनलोड करें (सर्वर-ca.pem, क्लाइंट-सर्टिफिकेट. pem और client-key.pem) और उन्हें स्लेव सर्वर के अंदर स्टोर करें। हम इन प्रमाणपत्रों का उपयोग दास सेवा से सुरक्षित रूप से मास्टर से जुड़ने के लिए करने जा रहे हैं। प्रक्रिया को सरल बनाने के लिए, उपरोक्त सभी प्रमाणपत्रों और कुंजी फ़ाइल को "gcloud-certs" नामक निर्देशिका के अंतर्गत रखा जाएगा:

$ mkdir -p /root/gcloud-certs # put the certs/key here

सुनिश्चित करें कि अनुमतियां सही हैं, विशेष रूप से निजी कुंजी फ़ाइल, client-key.pem:

$ chmod 600 /root/gcloud-certs/client-key.pem

अब हम अपने Google क्लाउड SQL MySQL 5.7 इंस्टेंस से सुरक्षित रूप से mysqldump बैकअप लेने के लिए तैयार हैं:

$ mysqldump -uroot -p \
-h 35.198.197.171 \
--ssl-ca=/root/gcloud-certs/server-ca.pem \
--ssl-cert=/root/gcloud-certs/client-cert.pem \
--ssl-key=/root/gcloud-certs/client-key.pem \
--single-transaction \
--all-databases \
--triggers \
--routines > fullbackup.sql

आपको निम्न चेतावनी मिलनी चाहिए:

"चेतावनी:GTID वाले सर्वर से आंशिक डंप में डिफ़ॉल्ट रूप से सभी लेनदेन के GTID शामिल होंगे, यहां तक ​​कि वे भी जिन्होंने डेटाबेस के दबे हुए हिस्सों को बदल दिया है। यदि आप नहीं चाहते हैं GTID को पुनर्स्थापित करें, --set-gtid-purged=OFF पास करें। एक पूर्ण डंप बनाने के लिए, --all-databases --triggers --routines --events पास करें।"

उपरोक्त चेतावनी इसलिए होती है क्योंकि हम --events ध्वज को परिभाषित करना छोड़ देते हैं जिसके लिए सुपर विशेषाधिकार की आवश्यकता होती है। प्रत्येक Google क्लाउड SQL इंस्टेंस के लिए बनाया गया रूट उपयोगकर्ता FILE और SUPER विशेषाधिकारों के साथ नहीं आता है। यह इस पद्धति का उपयोग करने की कमियों में से एक है, कि MySQL Events को Google Cloud SQL से आयात नहीं किया जा सकता है।

स्लेव सर्वर को कॉन्फ़िगर करना

स्लेव सर्वर पर, डेबियन 10 के लिए MySQL 5.7 स्थापित करें:

$ echo 'deb http://repo.mysql.com/apt/debian/ buster mysql-5.7' > /etc/apt/sources.list.d/mysql.list
$ apt-key adv --keyserver pgp.mit.edu --recv-keys 5072E1F5
$ apt update
$ apt -y install mysql-community-server

फिर, /etc/mysql/my.cnf (या कोई अन्य प्रासंगिक MySQL कॉन्फ़िगरेशन फ़ाइल) के अंदर [mysqld] अनुभाग के अंतर्गत निम्न पंक्तियाँ जोड़ें:

server-id = 1111 # different value than the master
log_bin = binlog
log_slave_updates = 1
expire_logs_days = 7
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = 1
sync_binlog = 1
report_host = 202.187.194.255 # IP address of this slave

उपरोक्त परिवर्तनों को लागू करने के लिए MySQL सर्वर को पुनरारंभ करें:

$ systemctl restart mysql

इस सर्वर पर mysqldump बैकअप पुनर्स्थापित करें:

$ mysql -uroot -p < fullbackup.sql

इस बिंदु पर, स्लेव सर्वर का MySQL रूट पासवर्ड Google क्लाउड SQL के समान होना चाहिए। अब से आपको किसी भिन्न रूट पासवर्ड से लॉग इन करना चाहिए।

ध्यान दें कि Google क्लाउड में रूट उपयोगकर्ता के पास पूर्ण विशेषाधिकार नहीं हैं। रूट उपयोगकर्ता को MySQL के अंदर सभी विशेषाधिकार प्राप्त करने की अनुमति देकर, हमें दास पक्ष में कुछ संशोधन करने की आवश्यकता है, क्योंकि इस सर्वर पर हमारा अधिक नियंत्रण है। ऐसा करने के लिए, हमें MySQL की उपयोगकर्ता तालिका को अपडेट करने की आवश्यकता है। दास के MySQL सर्वर में MySQL रूट उपयोगकर्ता के रूप में लॉगिन करें और निम्न कथन चलाएँ:

mysql> UPDATE mysql.user SET Super_priv = 'Y', File_priv = 'Y' WHERE User = 'root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

विशेषाधिकार तालिका को फ्लश करें:

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

वर्तमान टर्मिनल से बाहर निकलें और फिर से लॉगिन करें। यह सत्यापित करने के लिए निम्न कमांड चलाएँ कि रूट उपयोगकर्ता के पास अब उच्चतम स्तर के विशेषाधिकार हैं:

mysql> SHOW GRANTS FOR [email protected];
+---------------------------------------------------------------------+
| Grants for [email protected]                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+

प्रतिकृति लिंक सेट करना

सुरक्षा कारणों से, प्रतिकृति दास उपयोगकर्ता को SSL एन्क्रिप्टेड चैनल के माध्यम से मास्टर होस्ट (Google क्लाउड इंस्टेंस) से कनेक्ट करना होता है। इसलिए, हमें एसएसएल कुंजी और प्रमाणपत्र को सही अनुमति के साथ तैयार करना होगा और MySQL उपयोगकर्ता द्वारा सुलभ होना चाहिए। gcloud निर्देशिका को /etc/mysql में कॉपी करें और सही अनुमति और स्वामित्व असाइन करें:

$ mkdir -p /etc/mysql
$ cp /root/gcloud-certs /etc/mysql
$ chown -Rf mysql:mysql /etc/mysql/gcloud-certs

स्लेव सर्वर पर, प्रतिकृति लिंक को निम्नानुसार कॉन्फ़िगर करें:

mysql> CHANGE MASTER TO MASTER_HOST = '35.198.197.171', 
MASTER_USER = 'slave', 
MASTER_PASSWORD = 'slavepassword', 
MASTER_AUTO_POSITION = 1, 
MASTER_SSL = 1, 
MASTER_SSL_CERT = '/etc/mysql/gcloud-certs/client-cert.pem', 
MASTER_SSL_CA = '/etc/mysql/gcloud-certs/server-ca.pem', 
MASTER_SSL_KEY = '/etc/mysql/gcloud-certs/client-key.pem';

फिर, प्रतिकृति दास प्रारंभ करें:

mysql> START SLAVE;

आउटपुट को निम्न के रूप में सत्यापित करें:

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 35.198.197.171
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 1120160
               Relay_Log_File: puppet-master-relay-bin.000002
                Relay_Log_Pos: 15900
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1120160
              Relay_Log_Space: 16115
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: Yes
           Master_SSL_CA_File: /etc/mysql/gcloud-certs/server-ca.pem
           Master_SSL_CA_Path:
              Master_SSL_Cert: /etc/mysql/gcloud-certs/client-cert.pem
            Master_SSL_Cipher:
               Master_SSL_Key: /etc/mysql/gcloud-certs/client-key.pem
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 2272712871
                  Master_UUID: 8539637e-14d1-11eb-ae3c-42010a94001a
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set: 8539637e-14d1-11eb-ae3c-42010a94001a:5611-5664
            Executed_Gtid_Set: 8539637e-14d1-11eb-ae3c-42010a94001a:1-5664,
b1dabe58-14e6-11eb-840f-0800278dc04d:1-2
                Auto_Position: 1
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:

सुनिश्चित करें कि स्लेव_आईओ_रनिंग और स्लेव_एसक्यूएल_रनिंग मान 'हां' हैं, साथ ही सेकेंड_बिहाइंड_मास्टर 0 होना चाहिए, जिसका अर्थ है कि दास ने मास्टर के साथ पकड़ लिया है। ध्यान दें कि Executed_Gtid_Set में दो GTID हैं:

  • 8539637e-14d1-11eb-ae3c-42010a94001a:1-5664
  • b1dabe58-14e6-11eb-840f-0800278dc04d:1-2

पहला GTID वर्तमान मास्टर (Google क्लाउड SQL इंस्टेंस) से आने वाले परिवर्तनों का प्रतिनिधित्व करता है, जबकि दूसरा GTID उन परिवर्तनों का प्रतिनिधित्व करता है जो हमने दास होस्ट पर MySQL रूट उपयोगकर्ता के लिए विशेषाधिकारों को संशोधित करते समय किए हैं। यह देखने के लिए पहले GTID पर ध्यान दें कि क्या डेटाबेस सही ढंग से प्रतिकृति बना रहा है (प्रतिकृति करते समय पूर्णांक भाग वृद्धिशील होना चाहिए)।

सत्यापित करें कि क्या हमारा दास मेजबान मास्टर के दृष्टिकोण से प्रतिकृति का हिस्सा है। SQL क्लाउड इंस्टेंस में रूट के रूप में लॉगिन करें:

$ mysql -uroot -p \
-h 35.198.197.171 \
--ssl-ca=/root/gcloud-certs/server-ca.pem \
--ssl-cert=/root/gcloud-certs/client-cert.pem \
--ssl-key=/root/gcloud-certs/client-key.pem

और निम्न कथन चलाएँ:

mysql> SHOW SLAVE HOSTS;
*************************** 1. row ***************************
 Server_id: 1111
      Host: 202.187.194.255
      Port: 3306
 Master_id: 2272712871
Slave_UUID: b1dabe58-14e6-11eb-840f-0800278dc04d

इस बिंदु पर, आप एप्लिकेशन से डेटाबेस वर्कलोड को नए मास्टर के रूप में इस स्लेव सर्वर पर रीडायरेक्ट करने और Google क्लाउड में पुराने मास्टर को डीकमिशन करने के लिए अपने अगले कदम की योजना बना सकते हैं।

अंतिम विचार

आप MySQL के लिए Google क्लाउड SQL से ऑन-प्रिमाइसेस सर्वर पर बिना किसी परेशानी के ऑनलाइन माइग्रेशन कर सकते हैं। यह आपको सही समय आने पर गोपनीयता और नियंत्रण के लिए अपने डेटाबेस को क्लाउड विक्रेताओं से बाहर ले जाने की संभावना देता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CentOS 6 पर phpMyAdmin को कैसे स्थापित और कॉन्फ़िगर करें?

  2. क्या एक MySQL ट्रिगर एक CHECK बाधा का अनुकरण कर सकता है?

  3. PHP का उपयोग करके MySql तालिकाओं को कैसे आयात/पुनर्स्थापित करें?

  4. एक आदेश के साथ SQL समूह द्वारा

  5. अत्यधिक MySQL गतिविधि