2009-12-12 13 views
6

मैं वर्षों से उसी डीबी अबास्ट्रक्शन लाइब्रेरी का उपयोग कर रहा हूं। लेकिन आज इसने मेरे लॉग में इन सूचनाओं (8) संदेशों को लिखना शुरू कर दिया।mysql_pconnect(): 5 बाइट्स भेजना errno = 32 टूटा हुआ पाइप

एप्लिकेशन सही तरीके से काम कर रहा है लेकिन प्रत्येक बार जब कोई स्क्रिप्ट डीबी से जुड़ती है तो वही नोटिस लॉग होता है।

मुझे नहीं लगता कि क्या बदल सकता है। यह मेरी स्थानीय देव मशीन पर हो रहा है।

OS X 10.6.2 
PHP 5.3.0 (cli) 
mysql Ver 14.12 Distrib 5.0.87 
mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $ 
+0

क्या आपने कमांड लाइन उपयोगिता के माध्यम से कनेक्ट करने का प्रयास किया था? –

+0

क्या mysqld लॉग में कुछ समान/संबंधित है? – VolkerK

+0

मुझे mysql क्लाइंट क्लाइंट का उपयोग करने में कोई समस्या नहीं है। और जैसा कि मैंने कहा, mysqlnd कनेक्ट करता है और कनेक्शन काम करता है लेकिन यह अब इस नोटिस को हर pconnect() पर फेंक देता है। –

उत्तर

1

ऐसा इसलिए हो सकता है क्योंकि आपके डेटा में 'utf-8' वर्ण हैं। मेरे पास इसी तरह की समस्या थी।

अपवाद: mysql_query(): 1,462,592 बाइट्स की भेजने errno = 32 टूटी पाइप के साथ विफल

मैं

mysql -u username -p database < dump_file # this is bad 

इस्तेमाल किया आयात करने के लिए एसक्यूएल फ़ाइल UTF8 पात्रों में से बहुत कुछ शामिल है (थाई भाषा), लेकिन मैंने [mysql] के लिए डिफ़ॉल्ट-वर्ण-सेट = utf8 सेट नहीं किया है। इसलिए डेटाबेस में गलत कोडित डेटा ने उस समस्या का कारण बना दिया।

बदलने का प्रयास करें/अपने mysql my.cnf कॉन्फ़िग फ़ाइल में wait_timeout की स्थापना:

wait_timeout=3600 

यह कॉन्फ़िग फ़ाइल /etc/mysql/my.cnf में स्थित है (

+0

यह तब भी हो सकता है जब आपके पास सब कुछ utf-8 पर सेट हो। इसमें utf8mb4 का उपयोग करना शामिल है। मैं PHP 5.6.20 के साथ MySQL 5.6 का उपयोग कर रहा हूं और मुझे अभी भी समस्या मिली है। मुझे याद है कि जब मैंने लगातार कनेक्शन लागू करने की कोशिश की तो यह शुरू हुआ। –

11

कोई इस मुद्दे के साथ संघर्ष कर रहा है, तो यहाँ ठीक है उबंटू/डेबियन) और /usr/local/mysql/my.cnf (ओएसएक्स)।

mysql सर्वर को पुनरारंभ करें और इसे काम करना चाहिए।

0

सिर्फ mysqlnd ड्राइवर को हटाने और का उपयोग mysqli हाँ mysqlnd अधिक आधुनिक है, लेकिन क्या स्थिरता के बारे में? अगले आदेशों आपकी समस्या का समाधान

apt-get हटाने PHP5-mysqlnd

apt-get स्थापित PHP5-पीडीओ-mysql

3

केवल समाधान मैं अब तक है पाया है, बदलते

// From 
PDO::ATTR_PERSISTENT => true 
// To 
PDO::ATTR_PERSISTENT => false 

इस से बहुत खुश नहीं है, लेकिन इस दौरान काम करता है। मैं निजी परियोजना के लिए एक बहुत पुराना पीसी का उपयोग कर रहा हूं, इसलिए मुझे लगता है कि संसाधनों की कमी के साथ समस्या का सामना करना पड़ सकता है।

+0

मैंने देखा कि यह तब भी हो रहा था जब मैंने लगातार कनेक्शन का उपयोग करने की कोशिश की। शायद मुझे कुछ याद आ रही है। –

2

मैं PHP 5.6.20, पीडीओ (केवल अपवाद फेंक रहा हूं), और लगातार कनेक्शन के साथ MySQL 5.6.28 का उपयोग कर रहा हूं और सब कुछ utf8mb4 है। मेरा पूरा ढेर utf-8 (डीएसएन स्ट्रिंग सेटिंग्स, कनेक्शन, डेटाबेस सर्वर डेटाबेस, टेबल, कॉलम, अपाचे 2.4.12, PHP, सभी वेबपृष्ठ, सीएसएस ... के लिए स्थापित है) के लिए सेट किया गया है।

मुझे निम्न त्रुटि संदेश अंतःक्रियात्मक रूप से मिलता है और यह रहस्यमय और परेशान है।

नोटिस: पीडीओ :: __ निर्माण(): 5 बाइट्स की भेज फ़ाइल/foo/बार/baz

में errno = 32 टूटी पाइप के साथ विफल मान लिया जाये कि एक लगातार कनेक्शन एक , गैर-सहभागी एक है , MySQL 5.6 मैनुअल (5.1.4 सर्वर सिस्टम चर) सर्वर सिस्टम चर wait_timeout के बारे में निम्न कहते हैं।

सेकंड की संख्या सर्वर एक , गैर-सहभागी बंद करने से पहले कनेक्शन पर गतिविधि के लिए इंतजार कर रहा है।

डिफ़ॉल्ट: 28800 सेकंड

(28000 sec/1) * (1 hour/3600 sec) = 8 hours

मैक्स: 31,536,000 सेकंड

((31536000 sec/1) * (1 hr/3600 sec) * (1 day/24 hrs) = 365 days 

इसलिए, अपने my.cnf में wait_timeout की जाँच करें और यह निर्णय करें कि लगातार कनेक्शन आप क्या जरूरत है। इसके अलावा, आपको अपने आवेदन को अधिक लगातार मजबूत बनाने के लिए निवेश करना होगा जो लगातार कनेक्शन के लिए टूट गया है। स्पष्ट रूप से, आप नहीं चाहते हैं कि आपका ग्राहक अगले दिन वापस आएं (रात के लिए घर चला गया) और कहें "क्या बिल्ली है ?!"

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