सर्वर अपडेट करने के बाद MySQL फाइलें नहीं खोल सकता: ग़लती: 24


16

उबंटू: 12.04 एलटीएस (लिनक्स mysql02 3.2.0-40-जेनेरिक # 64-उबटन एसएमपी सोम मार्च 25 21:22:10 यूटीसी 2013 x86_64 x86_64 x86_64 GNU / लिनक्स)

MySQL: उबुन्टु डिस्ट्रो 5.5.31

मूल्यांकक: हटा दिया गया!

सर्वर पिछले एक साल से रॉक सॉलिड चल रहा है। फिर यह सोमवार MySQL विफल होने लगा। एक अद्यतन समस्या का कारण बना है और हम यह पता नहीं लगा सकते हैं कि यह क्या है। हमने MySQL 5.5.30 पर वापस जाने की भी कोशिश की है, लेकिन कोई किस्मत नहीं है। हम 5.5.31 पर लौट आए।

MySQL त्रुटि लॉग प्रविष्टियाँ:

130430  7:55:46 [ERROR] Error in accept: Too many open files
130430  7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fclvod.frm' (errno: 24)
130430  7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fcnote.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcont.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcontv.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffnote.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/frcfcl.frm' (errno: 24)

ऐसा प्रतीत होता है कि हम ulimit समस्या में चल रहे हैं। हमने APPARMOR को पूरी तरह से हटा दिया है। हमने /etc/security/limits.conf को बढ़ाया है और फिर भी कोई भाग्य नहीं है:

# Out of desperation....
* soft  nofile  49152
* hard  nofile  65536

# No effect!?!!?
#mysql  soft  nofile  49152
#mysql  hard  nofile  65536

और सीमाएं दिखाने के लिए .conf काम कर रहा है:

root@mysql02:/etc/security# ulimit -Sa | grep "open files"
open files                      (-n) 49152

root@mysql02:/etc/security# ulimit -Ha | grep "open files"
open files                      (-n) 65536

और यहाँ my.cnf में महत्वपूर्ण प्रविष्टियाँ हैं

[mysqld_safe]
open_files_limit = 16384

[mysqld]
open_files_limit = 16384

तथापि:

root@mysql02:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit                                  | 1024

हम पूरी तरह से स्टम्प्ड और नीचे हैं। किसी भी सहायता की काफी सराहना की जाएगी।


1
लॉग्स में क्या त्रुटि संदेश हैं जो बहुत सारी ओपन फाइलों के बारे में हैं? आपने ओपन_फाइल्स_लिमिट बदलने के बाद से mysqld को पुनः आरंभ किया है, है ना?
बर्ट

हां, हमने हर बार बदलाव करते हुए MySQL को फिर से शुरू किया है। हमारे पास एक तालिका है जो गुम होने के रूप में रिपोर्ट की जा रही है (और यह किसी कारण के लिए है): 30430 8:36:39 InnoDB: त्रुटि: एक तालिका खोलने की कोशिश कर रहा है, लेकिन InnoDB नहीं कर सका: टेबलस्पेस फ़ाइल खोलें './oti_l__rod_apinvoice_charges_charges। .ibd '!
वान

FYI करें, हमने अपने उपयोगकर्ताओं को हमारे दूसरे मास्टर (द्वंद्वयुद्ध मास्टर सेटअप) को गंभीर (01) में स्थानांतरित कर दिया है और यह अब ठीक उसी लक्षणों को प्रदर्शित कर रहा है। इस (01) में एक ही सटीक कॉन्फ़िगरेशन था क्योंकि यह विफल सर्वर (02) है और मास्टर पर हमारी असफलता है यह (02) मरना चाहिए। खैर, उस योजना के लिए बहुत कुछ। हमें पूरा यकीन है कि यह एक OS समस्या है।
वैन

मुझे यकीन है कि यह मूल पोस्टर के लिए काम नहीं किया था, लेकिन मेरे लिए यह एक सुरक्षा अद्यतन के बाद हुआ, और mysql को पुनरारंभ करना पर्याप्त था।
कजकाई

जवाबों:


19

ओएस: उबंटू (डेबियन) की तैनाती

MySQL सर्वर विकल्प: ओपन-फाइल-लिमिट

ऐसा लगता है कि डेबियन अपस्टार्ट /etc/security/limits.conf में परिभाषित मापदंडों का उपयोग नहीं करता है , इसलिए जब आप सर्विस कमांड के माध्यम से mysql लॉन्च करते हैं (और इसलिए, upstart के तहत), तो यह उनकी निर्धारित सीमा से अधिक हो जाता है और डिफ़ॉल्ट 1024 का उपयोग करता है ।

समाधान संशोधित करने के लिए है mysql.conf , फ़ाइल है कि नवोदय सेवा को परिभाषित करता है यह में स्थित है /etc/init/mysql.conf और निम्न पंक्तियां जोड़ें से पहले पूर्व शुरू ब्लॉक:

# NB: Upstart scripts do not respect
# /etc/security/limits.conf, so the open-file limits
# settings need to be applied here.
limit nofile 32000 32000
limit nproc 32000 32000

संदर्भ:


यह निराशाजनक रूप से कहीं स्पष्ट रूप से प्रलेखित नहीं है। :( हम अभी-अभी डेविड की पोस्ट सर्वरफॉल्ट पर आए हैं।
वान

और यह एक बग नहीं है, इस के अनुसार: Bugs.launchpad.net/mysql-server/+bug/938669
Van

यह तालिकाओं में विभाजन जोड़ने के बाद अचानक, और खतरनाक रूप से स्पष्ट हो सकता है, जो खुली फाइलों में वृद्धि का कारण बन सकता है।
markdwhite

इसने मेरे लिए उबंटू 15.10 पर काम किया। उन्नयन के बाद संकुल को 'फ़ाइल नहीं खोल सकता' त्रुटि संदेश मिला, जिसने मेरी सभी साइटों को तोड़ दिया: (... मुझे सिरदर्द और समय बचाने के लिए एक लाख धन्यवाद।
इमैनुएल

क्या कोई समझा सकता है कि "प्री-स्टार्ट" ब्लॉक क्या है? मैं Ubuntu 16 चला रहा हूँ और इस मुद्दे पर है, लेकिन विन्यास फाइल पहले की तुलना में अलग दिखती है
बिलीन्हो

4

उबंटू 15.10 पर भी यही समस्या थी।

https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758 - समाधान लाया:

  1. जांचें कि क्या /lib/systemd/system/mysql.service या /lib/systemd/system/mysqld.service मौजूद है
  2. (मेरे मामले में) यदि नहीं, तो /lib/systemd/system/mysql.service बनाएं और इस फ़ाइल की सामग्री https://bugs.launchpad.net/ubuntu/+source/mysql-5.6.6+bug/1434758/ पर कॉपी करें। टिप्पणियाँ / 11 और फ़ाइल में कहीं दो लाइनें जोड़ें

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  3. यदि एक या दोनों फाइलें विद्यमान हैं, तो जांच लें कि क्या यह दो लाइनें शामिल हैं:

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  4. निष्पादित systemctl daemon-reload

... और सब कुछ ठीक होना चाहिए।


1

जैसा कि उपरोक्त में से किसी ने भी मेरे लिए समस्या तय नहीं की है (केवल मेमोरी से बाहर चल रहे सिस्टम की ओर जाता है), यहां मैंने जो समाधान पाया है:

में /etc/mysql/my.confआप MySQLs आंतरिक open_files_limit बढ़ाने की जरूरत है। इसलिए अस्थायी रूप से इसे कॉन्फ़िगरेशन में जोड़ें और MySQL को पुनरारंभ करें।

[mysqld]
open_files_limit = 100000

sudo /etc/init.d/mysql restart

ऑपरेशन चलाने के बाद जो आपको बहुत अधिक खुली फ़ाइलों को त्रुटि देता है, आप अपने कॉन्फ़िगरेशन को इसके डिफ़ॉल्ट में बदल सकते हैं और MySQL को फिर से शुरू कर सकते हैं।


इसने मेरे लिए Ubuntu 16.04 पर काम किया, धन्यवाद :)
रिचर्ड फ्रैंक

0

वर्कअराउंड के लिए धन्यवाद। लेकिन मेरे लिए, इस मुद्दे को दो अन्य तथ्यों द्वारा ओवरशेड किया गया है।

  1. मेरी डेटा निर्देशिका डिफ़ॉल्ट स्थापना से अलग है। कई कारणों से, दोनों ऐतिहासिक और तकनीकी।
  2. मैं एक बहुत पुराने इंस्टॉलेशन से अपग्रेड कर रहा था, जो कि कई बैक-और फॉरवर्ड-पोर्ट्स से गुजरा। एक नए स्थापित MySQL 5.5 की पहली शुरुआत में, InnoDB इंजन सक्रिय नहीं था (आंतरिक कार्यान्वयन कॉन्फ़िगरेशन फ़ाइल में अक्षम था, लेकिन पिछले संस्करणों में उपलब्ध प्लगइन 5.5 में मौजूद नहीं है), और उन्नयन चिह्न वास्तव में उन्नयन के बिना बनाया गया था किसी भी टेबल।

InnoDB मुद्दे को ठीक करने के बाद, यह अभी भी थूक रहा था

mysql> SHOW DATABASES;
ERROR 1018 (HY000): Can't read dir of '.' (errno: 24)

मुझे रूट कंसोल और मैन्युअल रूप से पुनरारंभ करने में mysqld शुरू करना पड़ा

/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf --force

फिर सर्वर ने डेटाबेस दिखाना शुरू कर दिया, लेकिन कुछ तालिकाओं तक पहुंचने में असमर्थ रहे। बढ़ी हुई सीमाओं के साथ आपके वर्कअराउंड ने बाकी मुद्दों को तय किया, धन्यवाद!

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