2008-08-11 13 views
13

[मुझे आशा है कि यह बहुत अस्पष्ट और नरक नहीं है; यदि न्यूज ग्रुप से पूछता है तो मैं न्यूज ग्रुप से पूछूंगा]पिलोन त्रुटि - 'MySQL सर्वर चला गया है'

मैं एक साधारण वेब एप्लिकेशन की सेवा के लिए पिलोन (एक पायथन फ्रेमवर्क) का उपयोग कर रहा हूं, लेकिन यह समय-समय पर मरने लगता है, त्रुटि लॉग में: (2006, 'MySQL server has gone away')

मैंने कुछ जांच की, और देखा कि ऐसा इसलिए था क्योंकि MySQL से कनेक्शन नवीनीकृत नहीं किए जा रहे थे। हालांकि यह कोई समस्या नहीं होनी चाहिए, क्योंकि कॉन्फ़िगरेशन फ़ाइल में sqlalchemy.pool_recycle स्वचालित रूप से इसे जीवंत रखना चाहिए। डिफ़ॉल्ट 3600 था, लेकिन इस समस्या के कारण मैंने इसे वापस 1800 पर डायल किया। इससे थोड़ा सा मदद मिली, लेकिन 3600 दस्तावेज़ों के अनुसार ठीक होना चाहिए। त्रुटियां अभी भी अर्ध-नियमित होती हैं। मैं इसे बहुत कम नहीं करना चाहता हूं और डॉस मेरा खुद का डेटाबेस :)।

शायद मेरी MySQL कॉन्फ़िगरेशन में कुछ मूर्खतापूर्ण है? निश्चित नहीं है कि बिल्कुल कहां देखना है।

अन्य प्रासंगिक विवरण:

Python 2.5 
    Pylons: 0.9.6.2 (w/ sql_alchemy) 
    MySQL: 5.0.51 
+0

मैं यह त्रुटि आई एक स्क्रिप्ट मैंने लिखा के बाद AWOL चला गया और एक साथ एक तालिका में 10000 पंक्तियों डाला:

समाधान बस आरं में दूसरी पंक्ति को बदलने के लिए है। मुझे असफल होने की तरह लगता है - यह सुनिश्चित नहीं है कि यह आपकी समस्या से संबंधित है ... –

उत्तर

6

मुझे लगता है कि मैंने इसे ठीक किया है। यह पता चला है कि मेरे पास एक सरल विन्यास त्रुटि थी। मेरे INI फ़ाइल पढ़ने: sqlalchemy.default तो pool_recycle को नजरअंदाज कर दिया गया था:

sqlalchemy.default.url = [connection string here] 
sqlalchemy.pool_recycle = 1800 

समस्या मेरी environment.py फ़ाइल ने घोषणा की कि उपसर्ग वाला इंजन होगा केवल नक्शा कुंजी है।

sqlalchemy.default.pool_recycle = 1800 
+0

हाल ही में इस पोस्ट पर कुछ ट्रैफिक देखा गया। यह ध्यान दिया जाना चाहिए कि यह मुद्दा पिलोन 0.9.6 से संबंधित था। इसे पिलोन 0.9.7 में ख्याल रखा जाना चाहिए, और 'sqlalchemy.default' संपत्ति सिर्फ सादा 'sqlalchemy' के पक्ष में दूर हो जाती है – swilliams

2

आप MySQL के समय समाप्ति चर जांच करना चाह सकते:

show variables like '%timeout%'; 

आप शायद wait_timeout में रुचि (: interactive_timeout कम संभावना है, लेकिन संभव है) कर रहे हैं। डेबियन और उबंटू पर, डिफ़ॉल्ट 28800 (MySQL 8 घंटे के बाद कनेक्शन को मारता है), लेकिन हो सकता है कि आपके प्लेटफ़ॉर्म के लिए डिफ़ॉल्ट अलग हो या जो भी सर्वर को प्रशासित करता है, वह चीजों को अलग-अलग कॉन्फ़िगर कर देता है।

AFAICT, pool_recycle वास्तव में कनेक्शन को जीवित नहीं रखता है, यह उन्हें MySQL को मारने से पहले ही समाप्त हो जाता है। मैं पिलों से परिचित नहीं हूं, लेकिन यदि कनेक्शन को SELECT 1; पर अंतःक्रियात्मक रूप से करने का विकल्प होता है, तो यह मूल रूप से कोई सर्वर लोड और न्यूनतम नेटवर्क यातायात की लागत पर उन्हें जीवित रखेगा। एक अंतिम विचार: क्या आप किसी ऐसे कनेक्शन का उपयोग करने के लिए प्रबंधन कर रहे हैं जो पिलोन सोचता है कि यह समाप्त हो गया है?

+0

मैं निश्चित रूप से कुछ नहीं कह सकता; मैं अभी तक पर्याप्त रूप से पर्याप्त Pylons के आंतरिक पता नहीं है। मुझे अभी तक दस्तावेज के माध्यम से पोक करने का मौका नहीं मिला है (व्यस्त व्यस्त)। मुझे लगता है कि चयन 1 नहीं; चीज एक विकल्प है हालांकि, लगता है कि भी तरह का kludgey :)। – swilliams

संबंधित मुद्दे