क्या `mysql` डेटाबेस को दोहराने के लिए ठीक है?


15

जब मैंने मूल रूप से अपने मास्टर-टू-मास्टर प्रतिकृति की स्थापना की, तो मैंने उपयोग किया:

binlog-ignore-db=mysql

और मैन्युअल रूप से उपयोगकर्ता खातों और अनुदानों को सिंक्रनाइज़ कर रहा है। यह बस यह है कि यह उस समय कैसे किया गया था जब मैं उस समय का उपयोग कर रहा था । लेकिन क्या कोई कारण है कि मुझे इस लाइन को नहीं हटाना चाहिए और mysqlडेटाबेस को भी दोहराने की अनुमति देनी चाहिए ?

यदि ऐसा है: इससे पहले कि मैं बदलाव करूँ, यह सुनिश्चित करने के अलावा कि सभी अनुदान दोनों पर समान हैं (या बेहतर कहा गया है, कि संपूर्ण mysql डेटाबेस समान है), क्या कुछ और है जो मुझे दोबारा जांचना चाहिए या इसके बारे में पता होना चाहिए?


पिछले 4.5 वर्षों में मैंने लगातार छोटी-मोटी अपग्रेड पर भी mysql को अपग्रेड करते समय प्रतिकृति समस्याओं से जूझता रहा है। कारण यह है कि apt-get upgrade(वास्तव में, mysql- सर्वर .deb पोस्टस्टीन स्क्रिप्ट) ALTER TABLE userउन कथनों को निष्पादित करता है जिन्हें दोहराया नहीं जा सकता है। मैंने serverfault.com/questions/686025/…
dlo

जवाबों:


12

SQL GRANT कमांड को जाने बिना अपने आप को mysql परमिशन देना पूरी तरह से संभव है ।

उदाहरण: यहां क्लार्ककेंट के पासवर्ड के साथ सुपरडब्बा नामक कहीं से SQL GRANT का उपयोग करके अपने स्वयं के उपयोगकर्ता को पूर्ण विशेषाधिकार के साथ बनाना है:

GRANT ALL PRIVILEGES ON *.* TO superdba@'%' IDENTIFIED BY 'ClarkKent' WITH GRANT OPTION; 

यहाँ आप बिना GRANT कमांड के ऐसा कैसे कर सकते हैं:

सबसे पहले, यहाँ MySQL 5.1.51 के लिए mysql.user है

mysql> desc mysql.user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field                 | Type                              | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host                  | char(60)                          | NO   | PRI |         |       |
| User                  | char(16)                          | NO   | PRI |         |       |
| Password              | char(41)                          | NO   |     |         |       |
| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |
| File_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |
| References_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher            | blob                              | NO   |     | NULL    |       |
| x509_issuer           | blob                              | NO   |     | NULL    |       |
| x509_subject          | blob                              | NO   |     | NULL    |       |
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |
+-----------------------+-----------------------------------+------+-----+---------+-------+
39 rows in set (0.00 sec)

बस इन SQL कमांड को निष्पादित करें:

INSERT INTO mysql.user SET
Host='%',User='superdba',Password=PASSWORD('ClarkKent'),
Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',
Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',
Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',
Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',
Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',
Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',
Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',
Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y';
FLUSH PRIVILEGES;

यह INSERT एक कानूनी SQL स्टेटमेंट है जो बाइनरी लॉग में लैंड कर सकता है। क्या आप चाहते हैं कि कोई व्यक्ति इसे चलाए और नेटवर्क के साथ एक दृश्य पासवर्ड यात्रा करे? मास्टर पर एक बाइनरी लॉग में बैठने के लिए? गुलाम पर एक रिले लॉग में बैठने के लिए?

इस निर्देश के बाद

binlog-ignore-db=mysql       

इस तरह के SQL का उपयोग करके mysql अनुमतियाँ देने से रोकता है। हालाँकि, GRANTs को इस तरह रोका नहीं जा सकता है। इसलिए, सुनिश्चित करें कि आप इस तरह अनुदान प्रदान करते हैं:

SET SQL_LOG_BIN=0;
GRANT ...

मास्टर से दास के लिए GRANTs को रोकने के लिए।


ओह, रुको ... मैं उलझन में हूं: क्या आप कह रहे हैं कि GRANT स्टेटमेंट कोई बात नहीं दोहराते हैं कि बिनलॉग-इग्नोर-डीबी कन्फ़ेक्ट क्या कहता है? मुझे पता है कि अगर मैं एक सर्वर पर एक नया उपयोगकर्ता बनाता हूं, तो वह उपयोगकर्ता दूसरे पर दिखाई नहीं दे रहा है। तो शायद आपका मतलब है कि GRANT ट्रांसमिट और स्टोर हो जाता है लेकिन बस गुलाम पर लागू नहीं होता है ?
dlo

GRANTS बिना किसी रोड ब्लॉक के आवेदन कर सकते हैं। यही कारण है कि आपको SET SQL_LOG_BIN = 0 चलाना होगा; किसी भी GRANT कमांड को बाइनरी लॉग में प्रवेश करने से रोकने के लिए mysql सेशन में।
रोलैंडमाइसीडीडीबीए

GRANTS मास्टर और गुलाम पर किसी भी सड़क ब्लॉक के बिना लागू हो। यही कारण है कि आपको SET SQL_LOG_BIN = 0 चलाना होगा; mysql सत्र में किसी भी GRANT कमांड को बाइनरी लॉग्स में प्रवेश करने और दास के रिले लॉग को ट्रेस करने से रोकने के लिए।
रोलैंडमाइसीडीडीबीए

1
ठीक है। बस दूसरों के लिए स्पष्ट होने के लिए, मेरा मानना ​​है कि आप मुझे ट्रांजिट में पासवर्ड (जो स्कॉट द्वारा एसएसएल सुझाव के साथ संबोधित किया जा सकता है) के बारे में चेतावनी दे रहे हैं और बिनलॉग में क्लियरटेक्स्ट संग्रहीत किया जा रहा है। आप यह सुझाव दे रहे हैं कि यदि वे मेरे लिए चिंता का विषय हैं, तो मुझे बिनॉल-इग्नोर-डीबी = मायस्कल और सेट एसक्यूएल_ओजी_आईएन = ०; का उपयोग करना चाहिए । लेकिन अगर मैं उन शर्तों के साथ ठीक हूं, तो Binlog-ign-db लाइन को हटाकर GRANTs की नकल करने में कोई विशेष समस्या नहीं है। अगर यह एक गलत सारांश है तो मुझे सुधारें।
DLO

@ डलो - सकारात्मक !!!
रोलैंडमाइसीडीडीबीए

4

मुझे mysql डेटाबेस की नकल करने में कोई समस्या नहीं है, लेकिन फिर से, मेरा बुनियादी ढांचा फ़ायरवॉल और प्रॉक्सी उपकरणों के साथ सुरक्षा के एक अतिरिक्त स्तर पर उधार देता है, जहां किसी भी बुनियादी ढांचे के अलावा अन्य किसी के लिए भी असंभव है जो MySQL का उपयोग करता है । इसमें अतिरिक्त स्तर की सुविधा है, यह जानते हुए कि आपको केवल एक बार अनुमति देनी होगी और इसे दोहराया जाना चाहिए। जब यह इसे उबालता है, जब तक आपने मेजबान को ठीक से सेट कर दिया है, तो इसे इच्छित (अलावा आप, दास, आदि ...) के अलावा किसी और को उजागर नहीं करना चाहिए, आपको ठीक होना चाहिए।

यदि आप मध्य अंतरविरोधों में मनुष्य के साथ अत्यधिक चिंतित हैं, तो हमेशा एसएसएल पर प्रतिकृति भेजने का विकल्प होता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.