प्रतिकृति वातावरण में बिन लॉग को हटाना


13

मेरे पास प्रतिकृति वातावरण में द्विआधारी लॉग को हटाने के बारे में एक प्रश्न है:

हमारे पास 1 मास्टर और 2 दासों के साथ एक वातावरण है (mysql 5.5 चल रहा है)। कभी-कभी, हम भारी प्रसंस्करण समय के दौरान एक अंतरिक्ष मुद्दों में भाग लेते हैं, जिससे बिन लॉग निर्देशिका पूर्ण हो जाती है। हर 3 दिन में लॉग की समय सीमा समाप्त हो जाती है। मैं सोच रहा था, क्या कोई कारण है कि सभी बक्से - मास्टर और दोनों दासों पर लॉग को 3 दिनों के लिए रखा जाए? क्या यह समझ में आता है, उदाहरण के लिए, एक मास्टर पर 3 दिनों के लिए लॉग रखें, लेकिन दासों पर 1 दिन के लिए? इसके बारे में जाने का सबसे अच्छा तरीका क्या है?

धन्यवाद!


DBA.SE में आपका स्वागत है। यह सवाल एक +1 का हकदार है क्योंकि बाइनरी लॉग और रिले लॉग वृद्धि अक्सर दी जाती है, और अनियंत्रित होने पर स्रोत कई समस्याओं का कारण बन सकता है।
RolandoMySQLDBA

जवाबों:


12

दास

यदि आपके दास परास्नातक नहीं हैं, तो दासों को बाइनरी लॉगिंग की बिल्कुल भी आवश्यकता नहीं है। आप एक दास द्वारा संचित रिले लॉग स्थान की मात्रा पर एक टोपी लगा सकते हैं। 4 जी पर रिले लॉग को थ्रॉटल करने के लिए, relay_log_space_limitप्रत्येक स्लेव पर /etc/my/.cnf को जोड़ें

[mysqld]
relay_log_space_limit=4G

और mysql को पुनरारंभ करें

यदि आप इसे सेट नहीं कर सकते हैं, तो कम से कम आपके पास कुछ प्रकार की सतर्कता होनी चाहिए जो कि (रीलों लॉग द्वारा खपत कुल बाइट्स) SHOW SLAVE STATUS\Gके मूल्य को Relay_Log_Spaceजांचती है।

गुरुजी

मास्टर के रूप में, आप expire_logs_days1 पर सेट कर सकते हैं , लेकिन मेरे लिए आपके लिए एक गंभीर चेतावनी है ...

यदि प्रतिकृति टूट जाती है, तो आपके पास इसे ठीक करने के लिए 1 दिन है। अन्यथा, मास्टर पर एक द्विआधारी लॉग दूर घूम सकता है और आप वास्तविक प्रतिकृति को कमांड करने के लिए कोई भी चेंज मास्टर नहीं चला सकते हैं। मैं expire_logs_daysमास्टर पर 3 पर छोड़ दूँगा ।

शुक्रिया # 1

यदि आपके पास करने के लिए कोई रातोंरात थोक प्रसंस्करण है, तो शायद SET SQL_LOG_BIN=0;सत्र की शुरुआत में मास्टर पर बल्क प्रक्रियाएं चलाएं । यह, निश्चित रूप से, दास की नकल नहीं करेगा। आप दोनों गुलामों के समांतर एक ही बल्क लोड कर सकते हैं।

शुक्रिया # 2

एक और चीज जो आप मास्टर बाइनरी लॉग्स के प्रबंधन के लिए कर सकते हैं वह है संचय।

SHOW SLAVE STATUS\Gदोनों गुलामों पर भागो । को देखो Relay_Master_Log_File। यह मास्टर पर बाइनरी लॉग का प्रतिनिधित्व करता है जिसका अंतिम आदेश दास पर निष्पादित किया गया था।

*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 10.4.92.250
                Master_User: replicant
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.009677
        Read_Master_Log_Pos: 855227755
             Relay_Log_File: relay-bin.000674
              Relay_Log_Pos: 757296783
      Relay_Master_Log_File: mysql-bin.009590
           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: 757296646
            Relay_Log_Space: 94274010765
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: 80561
1 row in set (0.00 sec)

इस उदाहरण में, Relay_Master_Log_File mysql-bin.009590 है। इससे पहले कि सभी बाइनरी लॉग्स को मास्टर से हटाया जा सकता है। आप इसे मास्टर पर चला सकते हैं:

PURGE BINARY LOGS TO 'mysql-bin.009590';

यह पुराने लॉग मिटा देगा और अभी भी टैक में प्रतिकृति छोड़ देगा।

चेतावनी

बाइनरी लॉग्स फाइलें हैं जो क्रमिक रूप से संकलित करती हैं (एक फीफो कतार की तरह) सभी SQL लेनदेन या एक पंक्ति परिवर्तन के रूप में SQL लेनदेन को पूरा करती हैं। रिले लॉग एक फाइल है जो एक दूरस्थ सर्वर (उर्फ मास्टर) से बाइनरी लॉग प्रविष्टियों को इकट्ठा करता है।

MySQL प्रतिकृति में

  1. मास्टर को अपने बाइनरी लॉग को सक्षम करना होगा
  2. गुलाम रिले लॉग का संकलन करता है
  3. जब रिले लॉग में सभी SQL को संसाधित किया जाता है, तो इसे हटा दिया जाता है
  4. एक गुलाम पर, जब एक डीबी सर्वर पर एक रिले लॉग अधिक होता है, तो यह संकेत दे सकता है कि प्रतिकृति पीछे गिर रही है क्योंकि आईओ थ्रेड एसक्यूएल को एक मास्टर से तेजी से इकट्ठा कर रहा है कि SQL धागा रिले लॉग को संसाधित कर सकता है।
  5. Relay_log_space_limit का उपयोग करके प्रतिकृति को जमा होने से और संभावित रूप से डिस्क को भरने से रोकता है। नियम # 3 के आधार पर रिले लॉग आउट हो जाते हैं
  6. DB सर्वर के लिए मास्टर और स्लेव दोनों होना संभव है। यही एकमात्र परिस्थिति है जिसके तहत एक दास को बाइनरी लॉग सक्षम होना चाहिए। उस परिदृश्य में, एक DB सर्वर में बाइनरी लॉग और रिले लॉग दोनों होंगे।

यदि आप एक दास के लिए असफल हैं, और आप इसे एक मास्टर बनाना चाहते हैं

  • सेवा mysql बंद करो
  • log-bin=mysql-binदास पर /etc/my.cnf को जोड़ें
  • सेवा mysql प्रारंभ

आपको अन्य गुलामों के प्रतिकृति को नए पदोन्नत किए गए मास्टर पर सेट करना होगा और यह सुनिश्चित करना होगा कि गुलाम का डेटा नए पदोन्नत मास्टर के साथ मेल खाता है।

अद्यतन 2012-08-13 17:47 EDT

विकल्प पर MySQL प्रलेखन केrelay-log अनुसार , आपको इसे परिभाषित करना चाहिए। यहाँ क्यों है:

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


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