mysql का अभ्युदय बढने के बाद शुरू होता है innodb_buffer_pool_size और innodb_log_free_size


18

मैं यहां इस समाधान का अनुसरण कर रहा हूं /programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132/4056261 और अपने innodb_buffer_pool_size4 जी और बाद में 1G (बाद में 1024M) बढ़ाने की कोशिश की । लॉग फ़ाइल आकार के अलावा, लेकिन mysql उन मूल्यों के साथ शुरू नहीं करेगा। अगर मैंने इसे वापस 512M पर रखा तो mysql ठीक शुरू होता है।

इसे कैसे हल किया जा सकता है? मेरा सर्वर 16GB का है, और Webmin sysinfo के अनुसार:

Real memory 15.62 GB total, 3.13 GB used

इस बीच मुझे त्रुटि लॉग भी मिला:

120529 10:29:32 ps फ़ाइल से mysqld_safe mysqld /var/run/mysqld/mysqld.pid समाप्त

120529 10:29:33 mysqld_safe / var / lib / ssl से डेटाबेस के साथ mysqld डेमन शुरू करना

120529 10:29:33 [नोट] प्लगइन 'फेडेरेटेड' अक्षम है।

120529 10:29:33 InnoDB: InnoDB मेमोरी हीप अक्षम है

120529 10:29:33 InnoDB: Mutexes और rw_locks GCC परमाणु बिल्डरों का उपयोग करते हैं

120529 10:29:33 InnoDB: संपीड़ित टेबल 1.2.3 zlib का उपयोग करते हैं

120529 10:29:33 InnoDB: लिनक्स देशी AIO का उपयोग करना

120529 10:29:33 InnoDB: प्रारंभिक बफर पूल, आकार = 1.0G

120529 10:29:33 InnoDB: बफ़र पूल की प्रारंभिक आरंभीकरण

InnoDB: त्रुटि: लॉग फ़ाइल ।/ib_logfile0 विभिन्न आकार का है 0 134217728 बाइट्स

InnoDB: .cnf फ़ाइल 0 268435456 बाइट्स में निर्दिष्ट से!


क्या आप इसके लिए त्रुटि लॉग साझा कर सकते हैं ...
अब्दुल मनाफ

धन्यवाद, मैं इसे खोजने में कामयाब रहा। मुझे लगता है कि यह आसान हो जाएगा। मुझे शुरू में यह भी जोड़ना चाहिए था कि मैंने लॉग फ़ाइल का आकार बढ़ा दिया है और साथ ही बफर पूल में वृद्धि से मेल खाने के लिए (मैंने अब इस जानकारी को जोड़ा है)।
जियोर्जियो

ठीक है @ giorgio79 ...
अब्दुल

लॉग फ़ाइल को हटाने का प्रयास करें।
55

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

जवाबों:


19

@RickJames और @drogart से दिए गए दो जवाब अनिवार्य रूप से उपचार हैं। (प्रत्येक के लिए +1)।

आपके द्वारा प्रस्तुत त्रुटि लॉग से, अंतिम दो पंक्तियाँ कहती हैं:

InnoDB: त्रुटि: लॉग फ़ाइल ।/ib_logfile0 विभिन्न आकार का है 0 134217728 बाइट्स

InnoDB: .cnf फ़ाइल 0 268435456 बाइट्स में निर्दिष्ट से! `

उस समय, यह स्पष्ट था कि आप innodb_log_file_size को 256M (268435456) पर सेट my.cnfकरते हैं, जबकि इनोबीडी ट्रांजैक्शन लॉग्स ( ) ib_logfile0, ib_logfile1क्रमशः 128M (134217728) थे। आपके प्रश्न में मेरे StackOverflow उत्तर के लिंक को देखते हुए , आपको निम्नलिखित कार्य करने थे:

चरण 01) इसे इसमें जोड़ें my.cnf:

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

चरण 02) ओएस में इन कमांड को चलाएं

mysql -u... -p... -e"SET GLOBAL innodb_fast_shutdown = 1"
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

ताकि जो हो रहा है उसमें आत्मविश्वास हो, tail -fत्रुटि लॉग के खिलाफ चलाएं । जब आप प्रत्येक इनोडब लॉग फ़ाइल बना रहे हैं, तो आपको संदेश बताते हुए देखेंगे।


धन्यवाद, हां, मैंने उन्हें पहले नहीं हटाया था। बस यह देखना चाहता था कि mysql कैसा बर्ताव करता है। चरण 3 प्रदर्शन करने के बाद पुनः आरंभ करने का काम किया।
जियोर्जियो

1
मुझे लगता है कि किसी को लॉग फाइल को डिलीट नहीं करना चाहिए, बल्कि उन्हें कहीं और ले जाना चाहिए, और जब आपने सफलतापूर्वक लॉग फाइल का साइज़ बदल दिया है, तो उसे थोड़ी देर बाद हटा दें। अन्यथा, यदि आप चलने से पहले MySQL दुर्घटनाग्रस्त हो गए तो आप मुश्किल में पड़ जाएंगे service mysqld stop
काजमग्नस

4

लॉग में त्रुटि के आधार पर, मुझे लगता है कि आपने ऐसा किया है:

  • mysql बंद करो
  • मासकोड लॉग फ़ाइल का आकार बदलने के लिए my.cnf को संपादित किया
  • mysql शुरू करने की कोशिश की (फिर यह विफल रहा)

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

मैं पुरानी फाइलों को केवल डिलीट करने के बजाय दूसरी निर्देशिका में ले जाने की सलाह दूंगा, जब तक कि सर्वर ऊपर नहीं है और नई लॉग फाइल के साथ चल रहा है और सब कुछ ठीक है।


3

यदि आप केवल InnoDB चला रहे हैं, तो लगभग 70% उपलब्ध RAM के लिए बफर_पूल सेट किया जाना चाहिए ।

लॉग आकार बहुत मायने नहीं रखता है। इष्टतम इसे सेट करना है ताकि (Uptime * innodb_log_file_size / Innodb_os_log_written) लगभग 3600 (1 घंटा) हो।

लॉग आकार बदलने के लिए, किसी को होना चाहिए

  1. mysqld को सफाई से बंद करें
  2. my.cnf (my.ini) में मान हटाएं
  3. लॉग फ़ाइलों को हटा दें
  4. रिटस्टार्ट - नई लॉग फाइल को फिर से बनाया जाएगा।

धन्यवाद, हाँ यह एक सही उत्तर भी है। मैं केवल एक को स्वीकार कर सकता था। + 1d यह भी।
जियोर्जियो

1

बफ़र पूल आकार के लिए प्रदान किए गए आपके मूल्य में कुछ समस्याएँ भी हो सकती हैं । जैसे मेरे मामले में हुआ ...

जब बढ़ते या घटते हैं innodb_buffer_pool_size, तो ऑपरेशन चंक्स में किया जाता है। चंक आकार को innodb_buffer_pool_chunk_sizeकॉन्फ़िगरेशन विकल्प द्वारा परिभाषित किया गया है, जिसमें 128M का डिफ़ॉल्ट है। अधिक जानकारी के लिए, कॉन्फ़िगर करना InnoDB बफर पूल चंक साइज़ देखें

बफर पूल का आकार हमेशा एक या कई के बराबर होना चाहिए innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances। यदि आप innodb_buffer_pool_sizeऐसे मान से कॉन्फ़िगर करते हैं innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances, जो कई या एक से अधिक के बराबर नहीं है , तो बफ़र पूल का आकार स्वचालित रूप से ऐसे मान के बराबर हो जाता है या जो innodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesकि एक से अधिक होता है, निर्दिष्ट बफ़र पूल आकार से कम नहीं होता है।

उदाहरण में, innodb_buffer_pool_size8G पर सेट किया गया है, और innodb_buffer_pool_instances16 पर सेट किया गया innodb_buffer_pool_chunk_sizeहै। 128 M है, जो डिफ़ॉल्ट मान है।

8G एक वैध innodb_buffer_pool_sizeमूल्य है क्योंकि 8G एक बहु है innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M, जो 2G है।

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