MySQL बिन लॉग फ़ाइलें अभी भी पर्स या फ्लश के बाद क्यों मौजूद हैं?


12

मैंने PURGE BINARY LOGS के साथ-साथ FLUSH LOGS का भी उपयोग किया है, लेकिन mysql निर्देशिका में अभी भी ये फ़ाइलें हैं:

mysql-bin.000025
mysql-bin.000024
mysql-bin.000023
mysql-bin.000022
mysql-bin.000021
mysql-bin.000020
mysql-bin.000019
mysql-bin.index

क्या कोई कारण है कि कमांड्स का उपयोग करना काम नहीं कर रहा है? ये फाइलें काफी जगह ले रही हैं। मैं उनसे सुरक्षित छुटकारा पाना चाहूंगा।

जवाबों:


10

यह PURGE BINARY LOGSकथन निर्दिष्ट लॉग फ़ाइल नाम या टाइमस्टैम्प से पहले लॉग इंडेक्स फ़ाइल में सूचीबद्ध सभी बाइनरी लॉग फ़ाइलों को हटा देता है। हटाए गए लॉग फ़ाइलों को भी इंडेक्स फ़ाइल में दर्ज की गई सूची से हटा दिया जाता है, ताकि दी गई लॉग फ़ाइल सूची में पहली बन जाए।

मुझे आशा है कि आपने mysql-bin.000019कमांड का उपयोग करके द्विआधारी लॉग को शुद्ध किया है

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

आप सभी लॉग की तरह शुद्ध करने की जरूरत है

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

यह बाइनरी लॉग को हटा देगा mysql-bin.000025

अपडेट करें

तुम कोशिश कर सकते हो

RESET MASTER;

RESET MASTER अनुक्रमणिका फ़ाइल में सूचीबद्ध सभी बाइनरी लॉग फ़ाइलों को हटाता है, खाली होने के लिए बाइनरी लॉग इंडेक्स फ़ाइल को रीसेट करता है, और एक नई बाइनरी लॉग फ़ाइल बनाता है

RESET MASTER2 प्रमुख तरीकों से PURGE BINARY LOGS से भिन्न प्रभाव :

  1. RESET MASTER इंडेक्स फ़ाइल में सूचीबद्ध सभी बाइनरी लॉग फ़ाइलों को हटा देता है, केवल .000001 के संख्यात्मक प्रत्यय के साथ एक एकल, खाली बाइनरी लॉग फ़ाइल को छोड़ देता है, जबकि नंबर PURGE BINARY LOGS द्वारा रीसेट नहीं किया जाता है।

  2. RESET MASTERकिसी भी प्रतिकृति गुलाम चल रहे हैं, जबकि इस्तेमाल करने का इरादा नहीं था। RESET MASTERजब दास चल रहे होते हैं तब इस्तेमाल किया जाने वाला व्यवहार अपरिभाषित होता है (और इस तरह असमर्थित), जबकि PURGE BINARY LOGSप्रतिकृति गुलाम चलने के दौरान सुरक्षित रूप से इस्तेमाल किया जा सकता है।

रोलाण्डोमीक्यूडीबीबीए द्वारा सीवेएटी

यदि आप RESET MASTERकनेक्टेड और रनिंग स्लेव्स के साथ चलते हैं, तो प्रत्येक स्लेव का IO थ्रेड तुरंत अपनी जगह खो देगा। इस तरह प्रतिकृति टूटी हुई है और आपको सभी दासों के सिंक पर डेटा फिर से प्राप्त करने में समय बिताना होगा। यदि आप प्रतिकृति अखंडता को तोड़ने के बिना एक मास्टर से द्विआधारी लॉग को सुरक्षित रूप से हटाना चाहते हैं, तो यहां है कि आप क्या करते हैं:

  • भागो SHOW SLAVE STATUS\Gप्रत्येक दास पर।
  • ध्यान दें Relay_Master_Log_File। यह बाइनरी लॉग है जिसका नवीनतम बयान सफलतापूर्वक दास में निष्पादित किया गया था)।
  • के सभी डिस्प्ले से SHOW SLAVE STATUS\G, यह निर्धारित करें कि कौन सा Relay_Master_Log_Fileसबसे पुराना है (उदाहरण के लिए, 'mysql-bin.00123')।
  • आप चला सकते हैं PURGE BINARY LOGS TO 'mysql-bin.00123';गुलामों में से कोई भी अपनी जगह नहीं खोएगा।

समग्र प्रभाव? यह मास्टर पर द्विआधारी लॉग को पीछे छोड़ देगा जिनके बयानों को अभी तक सभी दासों पर निष्पादित नहीं किया गया है।


हाँ। मैंने यह कोशिश की है। काम नहीं कर रहा।
लैम्प_स्कलर

L myqql-bin.000025 ’को PURGE BINARY लॉग्स; जब आप इसे चलाते हैं तो क्या त्रुटि है।
अब्दुल मनाफ

हाँ। मैंने यह कोशिश की है। काम नहीं कर रहा।
लैम्प_स्कलर

मैंने अपना उत्तर अपडेट कर दिया है। आप रीसेट मास्टर की कोशिश कर सकते हैं।
अब्दुल मनाफ

1
@ydaetskcoR नहीं, मैं वास्तव में सबसे पुराना था। मुझे स्पष्ट करें: यदि, किसी भी समय, आप चलाते हैं CHANGE MASTER TO, तो यह सभी रिले लॉग को हटा देता है। अगर Relay_Master_Log_fileहै mysql-bin.00123, कि मास्टर कि दास के बारे में जानता पर सबसे पुराना द्विआधारी लॉग है। यदि mysql-bin.00123अब मास्टर पर मौजूद नहीं है, तो आप CHANGE MASTER TOनए लॉग का संदर्भ नहीं देने वाले स्लेव पर कोई भी चलाने से दोहराने के लिए उचित स्थान खो सकते हैं । इसे आसानी से अनदेखा किया जा सकता है और आप मैन्युअल रूप से प्रतिकृति को तोड़ सकते हैं।
रोलैंडम्यूसीडीडीबीए

5

मुझे यकीन नहीं है कि अगर आपके साथ ऐसा हुआ है, लेकिन मेरे मामले में MySQL ने "साइकिल चलाना" लॉग बंद कर दिया था और mysql-bin.index फ़ाइल अमान्य बिनलॉग फ़ाइल प्रविष्टियों के साथ "दूषित" हो गई थी।

विशेष रूप से, अनुक्रमणिका फ़ाइल mysql-bin.000001 पर शुरू हुई थी और mysql-bin.000220 को मिली थी, लेकिन फिर किसी तरह 001 से फिर से शुरू हो गई थी। जब मैंने इसकी तुलना अपने सर्वर की फाइलों से की तो मैं देख सकता था कि मेरे पास 001 से फाइलें थीं। 022।

पहले तो मैंने कोशिश की PURGE LOGS TO 'mysql-bin.000022';लेकिन यह काम नहीं किया।

अंत में मैंने MySQL बंद कर दिया और मैन्युअल रूप से अनुक्रमणिका फ़ाइल को संपादित किया जब तक कि यह मेरे सर्वर पर मौजूद फ़ाइलों से मेल नहीं खाती। जब मैंने MySQL को फिर से शुरू किया तो यह expire_logs_daysसेटिंग का सम्मान करने के लिए बिनलॉग फाइलों को साफ कर दिया और सामान्य रूप से फिर से काम करना शुरू कर दिया।


1
... और यह है कि आप MySQL के लॉग रोटेशन को ठीक करने के लिए अपने हाथों को कैसे गंदा करते हैं। हालांकि यह एक बहुत ही दुर्लभ घटना है। मुझे ऐसा करना पड़ा है। मजेदार बात यह है, PURGE LOGSकेवल आदर्श सेटअप के तहत काम करता है: 1) जब सभी बाइनरी लॉग लगातार होते हैं, तो 2) सभी बाइनरी लॉग को mysql-bin.indexफ़ाइल में नाम दिया जाता है , 3) कोई अतिरिक्त लॉग नहीं हैं जिनका उल्लेख नहीं किया गया है mysql-bin.index। +1 !!!
रोलैंडम्यूसीडीडीबीए

3

मेरे मामले में PURGE BINARYबस कुछ भी नहीं हटा रहा था।

मेरे पास 100% उपयोग में मेरा विभाजन था (मुझे अपनी स्लोक्वेरीज़ को थोड़ा साफ करना था ताकि mysql को फिर से शुरू करने के लिए पर्याप्त जगह मिल जाए), इसलिए मैंने जो पहली चीज़ की थी वह /etc/my.cnfलाइन को बदलने के लिए थी log-bin=mysql-bin(इसकी आवश्यकता नहीं थी) इस सर्वर में अब और मैं इसे हटाने के लिए भूल गया था), और फिर मैंने mysql को फिर से शुरू किया (यह आवश्यक था क्योंकि क्वेरीज़ कतारबद्ध थीं जो PURGE BINARYनिष्पादित होने से रोक रही थीं )।

उसके बाद मैं भागा PURGE BINARYलेकिन कुछ नहीं हुआ। इसलिए मैंने मैनुअल पढ़ा और पता चला कि:

यदि बाइनरी लॉगिंग को सक्षम करने के लिए सर्वर को --log- बिन विकल्प के साथ शुरू नहीं किया गया था तो इस कथन का कोई प्रभाव नहीं है।

इसलिए मैं log-bin=mysql-binअपने /etc/my.cnfमें फिर से जुड़ गया, फिर से शुरू किया, फाइलों को फिर से बनाया (अब सफलता के साथ), फिर से लाइन पर टिप्पणी की और फिर से शुरू की। इसके बाद फाइलें निकाली गईं और अब नहीं बनाई गईं।


2

यह मेरे लिए काम करता है: (MySQL सर्वर संस्करण: 5.6.14)

PURGE BINARY LOGS BEFORE NOW();

मेरे सिस्टम पर सभी बाइनरी लॉग को हटा देता है।


आपका उत्तर बाइनरी लॉग्स के रूप में लंबे समय तक काम करता है और बाइनरी लॉग इंडेक्स फाइलें सही संरेखित होती हैं। जब यह काम नहीं करता है, तो देखने के लिए उत्तर dba.stackexchange.com/a/74498/877 देखें। आपका जवाब अभी भी एक +1 मिलता है !!!
रोलैंडमाइसीडीडीबीए

0

आप आसानी से सभी लॉग को हटा सकते हैं :

PURGE BINARY LOGS BEFORE NOW();

या उद्धरण में किसी भी तारीख से अब func () बदलें:

PURGE BINARY LOGS BEFORE '2018-02-15 00:00:00';

या आप expire_logs_days = 10my.cnf में इस क्रिया को स्वचालित कर सकते हैं । डिफ़ॉल्ट रूप से expire_logs_days है 0 = लॉग को कभी न हटाएं।

( स्रोत )

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