क्या mysql-bin फ़ाइलों को हटाना सुरक्षित है?


92

मेरे पास mysql में MM प्रतिकृति है, और मैं चाहता हूं कि बॉक्स में कुछ खाली जगह को अनावश्यक फ़ाइलों को हटा दिया जाए, मैं इन mysql-binफाइलों के अंदर आ गया, /var/db/mysql/सैकड़ों फाइलें हैं जैसे कि mysql-bin.000123, mysql-bin.000223आदि। मैंने mysql प्रतिकृति की जाँच कर ली है show master statusऔर show slave statusवे कर रहे हैं कुछ स्थितियों में कुछ mysql- बिन फ़ाइलों का उपयोग करते हुए, लेकिन मुझे लगता है कि अन्य सभी बिन फ़ाइलें बचे हुए हैं जिनका अब उपयोग नहीं किया जाएगा। इस मामले में क्या उन सभी mysql- बिन फ़ाइलों को हटाना सुरक्षित है, जिनकी प्रतिकृति वर्तमान में इंगित कर रही है?

यदि इसे हटाना सुरक्षित है, तो क्या मैं उन फ़ाइलों को स्वचालित रूप से हटाने के लिए कर सकता हूं जो उपयोग में नहीं हैं?

जवाबों:


136

कृपया उन्हें केवल OS में हटाएं नहीं।

आप mysqld आप के लिए ऐसा करने की जरूरत है। यहाँ है कैसे mysqld इसे प्रबंधित करता है:

फ़ाइल mysql-bin.[index]सभी बाइनरी लॉग्स की सूची रखता है जो mysqld ने उत्पन्न की है और ऑटो-रोटेटेड है। के साथ संयोजन के रूप में बाहर की सफाई के लिए तंत्र mysql-bin.[index]हैं:

PURGE BINARY LOGS TO 'binlogname';
PURGE BINARY LOGS BEFORE 'datetimestamp';

ये आपके द्वारा बताए गए बिनलॉग या टाइमस्टैम्प से पहले सभी बाइनरी लॉग को साफ़ कर देंगे।

उदाहरण के लिए, यदि आप चलाते हैं

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

इससे पहले सभी बाइनरी लॉग मिटा देगा mysql-bin.000223

अगर तुम दौड़ते हो

PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND;

यह 3 दिन पहले आधी रात से पहले सभी बाइनरी लॉग मिटा देगा।

यदि आप चाहते हैं कि बिनलोग अपने आप दूर हो जाए और 3 दिनों का वात रखें, बस इसे निर्धारित करें:

mysql> SET GLOBAL expire_logs_days = 3;

फिर इसमें जोड़ें /etc/my.cnf

[mysqld]
expire_logs_days=3

और mysqld उन्हें आपके लिए लॉग हटा देगा

शोव STATUS \ G है

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

  • Master_Log_File
  • Relay_Master_Log_File

जब प्रतिकृति में थोड़ा या कोई अंतराल नहीं होता है तो ये आमतौर पर समान मूल्य के होते हैं। जब बहुत अधिक प्रतिकृति अंतराल होता है, तो ये मान भिन्न होते हैं। बस इसे सरल बनाने के लिए, जो कुछ भी Relay_Master_Log_Fileहै उसे चुनें , और मास्टर पर वापस जाएं और चलाएं

PURGE BINARY LOGS TO 'Whatever Relay_Master_Log_File Is';

इस तरह, प्रतिकृति बाधित नहीं होती है।


1
कृपया एक टाइपो पर ध्यान दें - अंडरस्कोर, डैश नहीं: [mysqld] expire_logs_days=3(और आपको [mysqld]अनुभाग में शामिल होना चाहिए
चैंजोकुन

@changokun यह एक टाइपो नहीं है। my.cnf डैश स्वीकार करेगा। SET GLOBAL expire_logs_days = 3;Mysql क्लाइंट से रन करना उन्हें स्वीकार नहीं होगा। MySQL डॉक्स में उदाहरण: dev.mysql.com/doc/refman/5.5/en/mysqld-option-tables.html
RolandoMySQLDBA

यह मेरे लिए काम करता है। प्रश्न, क्या के बीच ... फर्क है mysql> SET GLOBAL expire_logs_days = 3;और expire-logs-days=3में /etc/my.cnfवे एक ही .. रहे हैं? यह बेमानी है या नहीं? या, SET GLOBAL...फिर चलाना महत्वपूर्ण है expire-logs-days=..? धन्यवाद।
नीनो पाओलो

जल्दी से सभी लॉग को हटा दें, जाहिर है: PURGE BINARY LOGS BEFORE DATE(NOW());इसके लिए कोई समझदार चूक क्यों नहीं हैं? मेरे पास कहीं नहीं है, कभी भी खोजबीन ने लॉग फ़ाइल का आकार कुछ विशाल राशि में नहीं बदला। मेरे पास 10.0 GB की लॉग फाइलें थीं, इस कमांड को चलाने के बाद mysql.bin फोल्डर का आकार 1.6GB हो गया।
माइकल ट्रू

20

यह वास्तव में आपकी बैकअप रणनीति पर निर्भर करता है। बाइनरी लॉग को अपने पास रखने का एक मुख्य कारण अपने डेटाबेस को 'पॉइंट-इन-टाइम' के लिए पुनर्स्थापित करना है। यदि आपका डेटाबेस क्रैश हो जाता है और बहाली की आवश्यकता होती है, तो आप नवीनतम पूर्ण बैकअप को पुनर्स्थापित करेंगे, और फिर पूर्ण बैकअप की स्थिति से शुरू होने वाले बाइनरी लॉग को वापस खेलेंगे।

इसलिए, यदि आप हर दिन एक पूर्ण बैकअप करते हैं और आपके पास 7 दिनों के बाइनरी लॉग्स हैं, तो संभावना है कि आप पिछले 4-6 दिनों के बाइनरी लॉग्स को हटा सकते हैं। आप expire_logs_daysसेटिंग के साथ कितने दिनों के बाइनरी लॉग को नियंत्रित कर सकते हैं ।

आप उन बाइनरी लॉग को हटा सकते हैं जिनकी आपको पहले देखने की ज़रूरत नहीं है कि आप जो सबसे पुराना लॉग रखना चाहते हैं वह क्या है:

ls -lh /path/to/binary/logs/mysql-bin.0*

और फिर mysql में:

mysql> PURGE BINARY LOGS TO 'mysql-bin.XXXXX';

4

इसे इस्तेमाल करे:

RESET MASTER;

के रूप में दस्तावेज़ ने कहा:

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

यह सभी संबंधित बाइनरी लॉग फ़ाइलों को हटा देगा, जो आप नहीं चाहते हैं।

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