मुझे अपने दो कार्यक्रमों में भी यही समस्या रही है। मेरी त्रुटि यह थी:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
मैं इस समस्या को हल करने के लिए कुछ दिन बिताता हूं। मैंने कई दृष्टिकोणों का परीक्षण किया है जो विभिन्न वेब साइटों में उल्लिखित हैं, लेकिन उनमें से गैर ने काम किया। अंत में मैंने अपना कोड बदल दिया और पाया कि समस्या क्या थी। मैं आपको अलग-अलग तरीकों के बारे में बताने की कोशिश करूँगा और उन्हें यहाँ प्रस्तुत करूँगा ।
जब मैं इस त्रुटि का समाधान खोजने के लिए इंटरनेट की मांग कर रहा था, तो मुझे लगा कि कई समाधान हैं जो कम से कम एक व्यक्ति के लिए काम करते हैं, लेकिन दूसरों का कहना है कि यह उनके लिए काम नहीं करता है! इस त्रुटि के कई दृष्टिकोण क्यों हैं?
ऐसा लगता है कि यह त्रुटि आमतौर पर तब हो सकती है जब सर्वर से कनेक्ट होने में कोई समस्या हो । हो सकता है कि समस्या गलत क्वेरी स्ट्रिंग या डेटाबेस से बहुत अधिक कनेक्शन के कारण हो।
इसलिए मैं आपको एक-एक करके सभी समाधानों का प्रयास करने का सुझाव देता हूं और हार नहीं मानता!
यहां वे समाधान हैं जो मैंने इंटरनेट पर पाए हैं और उनमें से प्रत्येक के लिए, कम से कम उस व्यक्ति पर है जिसने उस समस्या को हल किया है।
बिंदु: उन समाधानों के लिए जिन्हें आपको MySQL सेटिंग्स बदलने की आवश्यकता है, आप निम्न का उल्लेख कर सकते हैं:
यहाँ समाधान हैं:
- "बाइंड-एड्रेस" विशेषता को बदलना
Uncomment "बाइंड-एड्रेस" विशेषता या इसे निम्नलिखित Ips में से एक में बदलें:
बाँध-पता = "127.0.0.1"
या
बाँध-पता = "0.0.0.0"
- "स्किप-नेटवर्किंग" पर टिप्पणी करना
अगर आपकी MySQL कॉन्फिगर फाइल में "स्किप-नेटवर्किंग" लाइन है, तो उस लाइन की शुरुआत में "#" साइन जोड़कर टिप्पणी करें।
- "प्रतीक्षा_टाइम" और "इंटरैक्टिव_टाइमआउट" बदलें
इन पंक्तियों को MySQL config फाइल में जोड़ें:
Wait_timeout = संख्या
इंटरैक्टिव_टाइम = संख्या
connect_timeout = संख्या
- ऑपरेटिंग सिस्टम प्रॉक्सी सेटिंग्स की जाँच करें
सुनिश्चित करें कि फायर वॉल, या एंटी वायरस सॉफ्ट वेयर MySQL सर्विस को ब्लॉक नहीं करते हैं।
अपने क्वेरी स्ट्रिंग की जाँच करें। आपका कनेक्शन स्ट्रिंग कुछ इस तरह होना चाहिए:
dbName = "my_database";
dbUserName = "root";
dbPassword = "";
String connectionString = "jdbc:mysql://localhost/" + dbName + "?user=" + dbUserName + "&password=" + dbPassword + "&useUnicode=true&characterEncoding=UTF-8";
सुनिश्चित करें कि आपके स्ट्रिंग में स्थान नहीं हैं। सभी कनेक्शन स्ट्रिंग को बिना किसी अंतरिक्ष वर्ण के जारी रखना चाहिए।
अपने पोर्ट के साथ "लोकलहोस्ट" को बदलने की कोशिश करें, जैसे 127.0.0.1। अपने कनेक्शन स्ट्रिंग में पोर्ट नंबर जोड़ने का भी प्रयास करें, जैसे:
String connectionString = "jdbc:mysql://localhost:3306/my_database?user=root&password=Pass&useUnicode=true&characterEncoding=UTF-8";
आमतौर पर MySQL का डिफ़ॉल्ट पोर्ट 3306 है।
उपयोगकर्ता नाम और पासवर्ड को अपने MySQL सर्वर के यूज़रनेम और पासवर्ड में बदलना न भूलें।
- अपनी JDK ड्राइवर लाइब्रेरी फ़ाइल को अपडेट करें
- अलग JDK और JREs का परीक्षण करें (जैसे JDK 6 और 7)
- max_allowed_packet को न बदलें
" max_allowed_packet " MySQL config फाइल में एक चर है जो अधिकतम पैकेट आकार को इंगित करता है, पैकेट की अधिकतम संख्या को नहीं। तो यह इस त्रुटि को हल करने में मदद नहीं करेगा।
TOMCAT6_SECURITY = हां को TOMCAT6_SECURITY = नहीं में बदलें
- सत्यापन प्रॉपर्टी का उपयोग करें
सत्यापन का उपयोग करें = "अब चयन करें ()" यह सुनिश्चित करने के लिए कि प्रत्येक क्वेरी में प्रतिक्रियाएं हैं
इस कोड को अपने कनेक्शन स्ट्रिंग में जोड़ें:
&autoReconnect=true&failOverReadOnly=false&maxReconnects=10
हालांकि इन समाधानों में से कोई भी मेरे लिए काम नहीं करता, मैं आपको उन्हें आजमाने का सुझाव देता हूं। क्योंकि कुछ लोग हैं कि इन चरणों का पालन करने के साथ उनकी समस्या को कैसे हल किया जाए।
लेकिन मेरी समस्या का हल क्या है? मेरी समस्या यह थी कि डेटाबेस पर मेरे कई चयन थे। हर बार मैंने कनेक्शन बनाया और फिर इसे बंद कर दिया। हालांकि मैंने हर बार कनेक्शन बंद कर दिया, लेकिन सिस्टम ने कई कनेक्शनों का सामना किया और मुझे वह त्रुटि दी। मैंने जो किया वह यह था कि मैंने अपने कनेक्शन चर को पूरी कक्षा के लिए एक सार्वजनिक (या निजी) चर के रूप में परिभाषित किया और इसे कंस्ट्रक्टर में इनिशियलाइज़ किया। फिर हर बार मैंने बस उस कनेक्शन का इस्तेमाल किया। इसने मेरी समस्या हल कर दी और नाटकीय रूप से मेरी गति भी बढ़ा दी।
निष्कर्ष
इस समस्या को हल करने का कोई सरल और अनोखा तरीका नहीं है। मैं आपको अपनी खुद की स्थिति के बारे में सोचने और उपरोक्त समाधान चुनने का सुझाव देता हूं। यदि आप इस त्रुटि को प्रोग्राम की शुरुआत में लेते हैं और आप डेटाबेस से कनेक्ट नहीं कर पा रहे हैं, तो आपको अपने कनेक्शन स्ट्रिंग में समस्या हो सकती है। लेकिन यदि आप डेटाबेस में कई सफल इंटरैक्शन के बाद यह त्रुटि लेते हैं, तो समस्या कनेक्शन की संख्या के साथ हो सकती है और आप "प्रतीक्षा_टाइम" और अन्य MySQL सेटिंग्स को बदलने के बारे में सोच सकते हैं या अपने कोड को फिर से लिख सकते हैं कि कनेक्शन की संख्या कैसे कम करें।