com.mysql.jdbc.exception.jdbc4.CommunicationsException: संचार लिंक विफलता


225

मैं अपने जावा प्रोग्राम्स पर बात करने के लिए अपने डेटाबेस को प्राप्त करने पर काम कर रहा हूं।

क्या कोई मुझे JDBC का उपयोग करके त्वरित और गंदा नमूना कार्यक्रम दे सकता है?

मैं एक शानदार त्रुटि हो रही है:

Exception in thread "main" 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.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at SqlTest.main(SqlTest.java:22)
Caused by: 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.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
    ... 12 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:218)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
    ... 13 more

परीक्षण फ़ाइल की सामग्री:

import com.mysql.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SqlTest {

    public static void main(String [] args) throws Exception {
        // Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
        // // edit the jdbc url 
        Connection conn = DriverManager.getConnection( 
            "jdbc:mysql://localhost:3306/projects?user=user1&password=123");
        // Statement st = conn.createStatement();
        // ResultSet rs = st.executeQuery( "select * from table" );

        System.out.println("Connected?");
    }
}

17
मैं एक बेवकूफ था। MySQL सर्वर शुरू नहीं किया गया था :( इसे शुरू करने के बाद यह सफल रहा।
akfaisel

जवाबों:


251

तो, आपके पास ए

com.mysql.jdbc.exception.jdbc4.CommunicationsException: संचार लिंक विफलता
java.net.ConnectException: कनेक्शन अस्वीकृत

मैं इस उत्तर से उद्धृत कर रहा हूं जिसमें एक चरण-दर-चरण MySQL + JDBC ट्यूटोरियल शामिल है:

यदि आपको एक SQLException: Connection refusedया Connection timed outएक MySQL विशिष्ट मिलता है CommunicationsException: Communications link failure, तो इसका मतलब है कि DB बिल्कुल उपलब्ध नहीं है। इसके निम्नलिखित कारणों में से एक या अधिक हो सकते हैं:

  1. JDBC URL में IP एड्रेस या होस्टनाम गलत है।
  2. JDBC URL में होस्टनाम स्थानीय DNS सर्वर द्वारा मान्यता प्राप्त नहीं है।
  3. JDBC URL में पोर्ट नंबर गायब या गलत है।
  4. DB सर्वर डाउन है।
  5. DB सर्वर TCP / IP कनेक्शन स्वीकार नहीं करता है।
  6. DB सर्वर कनेक्शन से बाहर चला गया है।
  7. जावा और डीबी के बीच कुछ कनेक्शन अवरुद्ध कर रहा है, उदाहरण के लिए एक फ़ायरवॉल या प्रॉक्सी।

एक या दूसरे को हल करने के लिए, निम्नलिखित सलाह का पालन करें:

  1. सत्यापित करें और उनके साथ परीक्षण करें ping
  2. DNS को ताज़ा करें या इसके बजाय JDBC URL में IP पते का उपयोग करें।
  3. इसे my.cnfMySQL DB के आधार पर सत्यापित करें ।
  4. DB शुरू करो।
  5. सत्यापित करें कि क्या बिना mysqld शुरू किया गया है --skip-networking option
  6. DB को पुनरारंभ करें और इसके अनुसार अपने कोड को ठीक करें जो इसमें कनेक्शन बंद करता है finally
  7. पोर्ट को अनुमति / अग्रेषित करने के लिए फ़ायरवॉल और / या फ़ायरवॉल / प्रॉक्सी को कॉन्फ़िगर करें।

यह सभी देखें:


4
MAMP / MAMP Pro डिफ़ॉल्ट रूप से MAMP_skip-नेटवर्किंग_MAMP सेट करता है। आप इस लाइन को अपने my.cfn
Jurik

6
इस मामले में नहीं, लेकिन एक संचार लिंक विफलता भी तब होती है जब आप कनेक्शन पूल का उपयोग कर रहे होते हैं और लंबे समय तक निष्क्रियता के कारण कनेक्शन बंद हो जाते हैं। केवल उस मामले में, यह कहता है "आखिरी पैकेट कुछ" एक्स "सेकंड पहले प्राप्त किया गया था"
nikel

@nikel कनेक्शन पूल में थ्रेड "चयन 1" सत्यापन क्वेरी को फायर करके सक्रिय नहीं रखा जाना चाहिए? जब हम mysql सर्वर टाइमआउट की तुलना में कम समय के अंतराल पर चलने के लिए बेदखलदार को सेट करते हैं, तो वे लंबे समय तक निष्क्रियता से बंद क्यों हो जाएंगे?
फरहाद

हां, एक सत्यापन क्वेरी इसे ठीक कर देगी। मेरी बात उस मामले के बारे में थी जब यह सेट नहीं होता है और पूल में कनेक्शन निष्क्रियता के कारण समय पर निकल जाते हैं
निकेल

कभी-कभी पोर्ट कनेक्शन स्ट्रिंग से गायब होता है और ड्राइवर डिफ़ॉल्ट 3306 mysql पोर्ट से कनेक्ट करने का प्रयास करेगा और विफल हो जाएगा यदि mysql इस पोर्ट पर नहीं चल रहा है। यह मेरा मुद्दा था इसलिए मुझे इस मामले में उल्लेख करना चाहिए कि कोई और इसे उपयोगी समझेगा।
अब्दुल मन्नान

10

मैं इस अपवाद को पकड़ता हूं जब जावा ढेर से बाहर निकलता है। अगर मैं रैम में कई डेटा आइटम डालने की कोशिश करता हूं - पहले मैं " कम्युनिकेशंस लिंक विफलता " और अगले " आउटऑफमैरीऑरर " को पकड़ता हूं ।

मैंने इसे लॉग किया और मैंने मेमोरी खपत (1/2 डेटा हटाएं) और सब ठीक कर दिया।


9

मेरे मामले में, मुझे वास्तविक डेटाबेस सर्वर आईपी पते पर लोकलहोस्ट के प्रतिस्थापन की आवश्यकता थी

के बजाय

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://localhost:3306/DBname", "root", "root");

मुझे चाहिए था

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");

नवीनतम अद्यतन 4/5/18 पर: वर्तमान में, मैं MySQL कार्यक्षेत्र 6.3 का उपयोग कर रहा हूं। मैं यहां समाधान की जांच करने के लिए आया था, लेकिन मैंने इसे अपने दम पर पाया, यह सिर्फ इतना है कि आपका MySQL सर्वर नहीं चल रहा है या यह बंद है। मैंने अपने सर्वर को फिर से शुरू किया, यह एक आकर्षण की तरह काम करता था।
अभिषेक एकनाथ

7
यह 'सबसे अच्छा समाधान' क्यों है? यह किस समस्या को हल करता है, और कैसे?
लोर्ने की

यह समाधान डेटाफ्रेम उत्पन्न नहीं कर सकता
एलन

8

यह com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionअपवाद तब होता है जब आपका डेटाबेस कनेक्शन लंबे समय तक निष्क्रिय रहता है।

यह निष्क्रिय कनेक्शन सही है, connection.isClosed();लेकिन यदि हम कथन को निष्पादित करने का प्रयास करते हैं, तो यह इस अपवाद को नष्ट कर देगा, इसलिए मैं डेटाबेस पूलिंग के साथ जाने का सुझाव दूंगा।


2
यह अन्य कारणों से भी होता है जैसे कि 'कनेक्शन मना'।
लोर्ने की

6

मुझे घंटों से वही समस्या हो रही है। मैं MAMP सर्वर का उपयोग कर रहा हूं

लोकलहोस्ट का उपयोग करने के बजाय: [Apache Port], अपने MySQL पोर्ट का उपयोग करें।

नीचे MAMP सर्वर के लिए डिफ़ॉल्ट MySQL पोर्ट है।

String url = "jdbc:mysql://localhost:8889/db_name";

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);

यदि आपके पास
मैसकल

5

मैं यहाँ गलत पेड़ को भौंक सकता हूं, लेकिन आपका अपवाद यह दर्शाता है कि आपका MySQL सर्वर उपलब्ध नहीं है।

थ्रेड में अपवाद "मुख्य" com.mysql.jdbc.exception.jdbc4.CommunicationsException: संचार लिंक विफलता। सर्वर पर सफलतापूर्वक भेजा गया अंतिम पैकेट 0 मिलीसेकंड पहले था। ड्राइवर को सर्वर से कोई पैकेट नहीं मिला है। पर ...

यदि आप कोशिश करते हैं तो क्या होगा (टर्मिनल से)

mysql -u username -p

आपको उपयोगकर्ता नाम से जुड़े पासवर्ड के लिए कहा जाएगा। सही पासवर्ड देने के बाद mysql क्लाइंट कनेक्ट होता है?

यदि नहीं तो आपको प्राथमिकता से MySQL शुरू करना पड़ सकता है। आप इसे स्टार्टअप पर चलाने के लिए भी सेट कर सकते हैं।


1
मैं अपने MySQL सर्वर को चलाने के लिए MAMP का उपयोग कर रहा हूं। यह एक मुद्दा होगा?
जोश के

जब मैं अपने (Sequal Pro के माध्यम से) कनेक्ट करता हूं तो localhostमैं सही उपयोगकर्ता नाम / पासवर्ड का उपयोग करता हूं और यह ठीक काम करता है।
जोश के

5

मेरे मामले में, ऐसा लगता है कि संस्करण mysql-connector-javaबहुत पुराना था।

मेरे डेमो में, मैं किसी mysql-connector-javaतरह इस तरह का उपयोग करता हूं :

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>

लेकिन विकसित वातावरण में, मैं इसका उपयोग करता हूं:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>

और मेरा MySQL संस्करण 5.1.48 था (हां, यह पुराना है, सिर्फ उत्पाद संस्करण की नकल के लिए)। तो मैं उसी त्रुटि से मिला।

चूंकि कारण पाया जाता है, समाधान भी पाया जाता है। संस्करण का मिलान करें!


4
संभावना नहीं है। इन सभी ड्राइवर संस्करणों को पीछे की ओर संगत माना जाता है।
लोर्ने

1
यह मुद्दा नए mysql कनेक्टर्स में तय हो गया है, देखें stackoverflow.com/questions/14559794/…
Nishi

मेरे लिए भी यही मामला है। ड्राइवर का संस्करण MySQL 5 के लिए है जबकि सर्वर का संस्करण 8. है। इसलिए मैंने जार के संस्करण को अद्यतन किया और समस्या हल हो गई।
edenPan

4

मुझे वही त्रुटि मिली क्योंकि मैं mysql सर्वर शुरू किए बिना अपना कार्यक्रम चलाने की कोशिश कर रहा था।

Mysql सर्वर शुरू करने के बाद, सब कुछ सही हो गया।


4

पहले के उत्तर उपयुक्त हैं। लेकिन, मैं एक और सामान्य मुद्दे की ओर भी इशारा करना चाहूंगा।

मुझे इसी तरह की समस्या का सामना करना पड़ा और इसका कारण मेरी कंपनी का नेटवर्क प्रतिबंध था।

जब मैं किसी अन्य नेटवर्क में था तब भी वही कनेक्शन सफल हो रहा था।


1
इस पॉइंटर ने मेरी समस्या हल कर दी, वीपीएन से कनेक्ट होने पर 'लोकलहोस्ट' निर्दिष्ट करना काम कर रहा था, लेकिन वीपीएन से डिस्कनेक्ट होने पर भी यह काम नहीं कर रहा था, हालांकि मैंने 'लोकलहोस्ट' को '127.0.0.1' में बदलकर यह तय किया
gannu_nit

4

कृपया अपना आईपी पता /etc/mysql/my.cnf फ़ाइल में अपडेट करें

bind-address  = 0.0.0.0

Mysql deamon और mysql सेवाओं को पुनरारंभ करें।


1
मान्य बाइंड पते का उपयोग करने के लिए संपादित
OneCricketeer

3

MySQL-JDBC-Type-4-Treiber (ig 'mysql-कनेक्टर-java-5.1.11-bin.jar' को 'mysql-connector-java-5.1.11.zip') से Mysql में डाउनलोड करें

आपको संकलित करने के दौरान ड्राइवर जार को चालू करने की आवश्यकता होती है- और अपने क्लासपाथ में रनटाइम।

Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// edit the jdbc url 
Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password );
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery( "select * from table" );

नहीं, मुझे कुछ भी नहीं खोजने के बारे में त्रुटियों का तूफान देता है। क्या JAR फ़ाइल के बिना इसे आयात करना संभव होगा?
जोश के

@ यह काम करता है, तो आपको वास्तव में बस अपने वर्गपथ को ठीक से स्थापित करने की आवश्यकता है। (या जार को अपने% JAVA_HOME% \ jre \ lib \ ext निर्देशिका में कॉपी करें, लेकिन इसे बुरा व्यवहार माना जाता है)
stacker

3

यह त्रुटि तब भी हो सकती है यदि जावा SSL पर MySQL से जुड़ने की कोशिश करता है, लेकिन कुछ गलत हो जाता है। (मेरे मामले में, मैं MySQL में Payara Server 5.193.1 कनेक्शन पूल को कॉन्फ़िगर कर रहा था।)

कुछ लोगों ने सेटिंग का सुझाव दिया useSSL=false। हालाँकि, कनेक्टर / J संस्करण के बाद से 8.0.13, उस सेटिंग को हटा दिया गया है। यहाँ MySQL कनेक्टर / J 8.0 कॉन्फ़िगरेशन गुणों का एक अंश है :

sslMode

डिफ़ॉल्ट रूप से, नेटवर्क कनेक्शन एसएसएल एन्क्रिप्टेड हैं; यह संपत्ति सुरक्षित कनेक्शन को बंद करने की अनुमति देती है, या सुरक्षा के विभिन्न स्तरों को चुना जाना चाहिए। निम्नलिखित मूल्यों की अनुमति है: DISABLED- अनएन्क्रिप्टेड कनेक्शन स्थापित करें; PREFERRED- (डिफ़ॉल्ट) एन्क्रिप्टेड कनेक्शन स्थापित करें यदि सर्वर उन्हें सक्षम करता है, अन्यथा अनएन्क्रिप्टेड कनेक्शन पर वापस गिर जाता है; REQUIRED- सुरक्षित कनेक्शन स्थापित करें यदि सर्वर ने उन्हें सक्षम किया, अन्यथा विफल; VERIFY_CA- जैसे कि REQUIREDइसके अलावा कॉन्फ़िगर सर्टिफिकेट अथॉरिटी (सीए) सर्टिफिकेट के खिलाफ सर्वर टीएलएस सर्टिफिकेट को सत्यापित करना; VERIFY_IDENTITY- जैसे VERIFY_CA, लेकिन इसके अलावा सत्यापित करें कि सर्वर प्रमाणपत्र उस होस्ट से मेल खाता है जिससे कनेक्शन का प्रयास किया गया है।

यह गुण पदावनत विरासत गुण की जगह useSSL, requireSSLहै, और verifyServerCertificate, जो अभी भी स्वीकार किए जाते हैं, लेकिन एक मूल्य में अनुवाद कर रहे हैं के लिए sslModeहै, तो sslModeस्पष्ट रूप से सेट नहीं है: useSSL=falseकरने के लिए अनुवाद किया है sslMode=DISABLED; {"useSSL=true", "requireSSL=false", "verifyServerCertificate=false"}इसका अनुवाद किया गया है sslMode=PREFERRED; {"useSSL=true", "requireSSL=true", "verifyServerCertificate=false"}इसका अनुवाद किया गया है sslMode=REQUIRED; {"useSSL=true" AND "verifyServerCertificate=true"}के लिए अनुवादित है sslMode=VERIFY_CA। के लिए कोई समकक्ष विरासत सेटिंग्स नहीं है sslMode=VERIFY_IDENTITY। ध्यान दें कि, सभी सर्वर संस्करणों के लिए, डिफ़ॉल्ट सेटिंग sslModeहै PREFERRED, और यह उस की विरासत सेटिंग्स के बराबर है , जो कि कनेक्टर / J 8.0.12 और पहले कुछ स्थितियों में उनकी डिफ़ॉल्ट सेटिंग्स से अलग हैं। ऐसे अनुप्रयोग जो विरासत गुणों का उपयोग करना जारी रखते हैं और उनकी पुरानी डिफ़ॉल्ट सेटिंग्स पर भरोसा करते हैं, उनकी समीक्षा की जानी चाहिए।useSSL=true , requireSSL=falseऔरverifyServerCertificate=false

यदि sslModeस्पष्ट रूप से सेट किया गया है तो विरासत के गुणों की अनदेखी की जाती है । में से कोई भी, तो sslModeया useSSLस्पष्ट रूप से सेट किया जाता है, की डिफ़ॉल्ट सेटिंग sslMode=PREFERREDलागू होता है।

डिफ़ॉल्ट :PREFERRED

संस्करण के बाद से : 8.0.13

इसलिए, मेरे मामले में, sslMode=DISABLEDइस मुद्दे को हल करने के लिए सभी की आवश्यकता थी। यह एक परीक्षण मशीन पर था। लेकिन उत्पादन के लिए, सुरक्षित समाधान SSL का उपयोग करने के लिए जावा क्लाइंट और MySQL सर्वर को ठीक से कॉन्फ़िगर करेगा।


ध्यान दें कि एसएसएल को अक्षम करके, आपको भी सेट करना पड़ सकता है allowPublicKeyRetrieval=true। (फिर, सुरक्षा के दृष्टिकोण से एक बुद्धिमान निर्णय नहीं)। आगे की जानकारी MySQL ConnectionString विकल्पों में दी गई है :

AllowPublicKeyRetrieval

यदि उपयोगकर्ता खाता sha256_passwordप्रमाणीकरण का उपयोग करता है, तो पासवर्ड को ट्रांसमिशन के दौरान संरक्षित किया जाना चाहिए; टीएलएस इसके लिए पसंदीदा तंत्र है, लेकिन अगर यह उपलब्ध नहीं है तो आरएसए सार्वजनिक कुंजी एन्क्रिप्शन का उपयोग किया जाएगा। सर्वर की RSA सार्वजनिक कुंजी निर्दिष्ट करने के लिए, ServerRSAPublicKeyFileकनेक्शन स्ट्रिंग सेटिंग का उपयोग करें , या AllowPublicKeyRetrieval=Trueक्लाइंट को सर्वर से सार्वजनिक कुंजी को स्वचालित रूप से अनुरोध करने की अनुमति देने के लिए सेट करें। ध्यान दें कि AllowPublicKeyRetrieval=Trueएक दुर्भावनापूर्ण प्रॉक्सी को प्लेनटेक्स्ट पासवर्ड प्राप्त करने के लिए एक MITM हमला करने की अनुमति दे सकता है, इसलिए यह डिफ़ॉल्ट रूप से गलत है और स्पष्ट रूप से सक्षम होना चाहिए।


Payara Server GitHub से प्रासंगिक धागा ।
बजे एमएस डौस्ती

3

मेरी इसी समस्या को निम्न चरणों से हल किया गया है:

  1. के लिए जाओ my.cnf

    vi /etc/mysql/my.cnf
  2. इसका बाइंड-एड्रेस संशोधित करें

    "bind-address = 0.0.0.0"
  3. MySQL को पुनरारंभ करें

    sudo /etc/init.d/mysql restart

2

यदि आप mysql डेटाबेस को स्थापित करने के लिए उपयोग WAMPया XAMPसर्वर कर रहे हैं । फिर आपको mysql को स्पष्ट रूप से शुरू करना होगा com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureजो कि डेटाबेस से जुड़ने के दौरान दिखाई देगा


2

मैंने इस समस्या को एक आसान तरीके से हल किया, जो मेरे लिए काम कर गया। मैं वीर्य समस्या "com.mysql.jdbc.exception.jdbc4.CommunicationsException: संचार लिंक विफलता" था। मेरी db.properties फ़ाइल में मेरे पास यह था: url: jdbc: mysql: // localhost: 90 / myDB, केवल पोर्ट url को हटा दिया, जिसके परिणामस्वरूप इस तरीके से url: jdbc: mysll: // localhost / myDB और मेरे लिए काम किया। ।


2

मेरे साथ ऐसा तब हुआ जब मैंने my.ini और php.ini फाइलों में mysql पोर्ट को 3306 से 3307 में बदल दिया, लेकिन बंदरगाहों (3307-> 3306) को बदलने के बाद फिर से ठीक काम किया।


2

यदि आपने अपना पोर्ट बदल दिया है, तो आपको इस तरह की त्रुटि मिलती है "com.mysql.jdbc.exception.jdbc4.CommunicationsException: संचार लिंक विफलता" कृपया अपना पोर्ट नंबर जांचें


1

बस यह अनुभव किया।

इसके द्वारा काम करने के लिए समझे: (इसे स्टैटिक ब्लॉक इंटेलाइज़र में रखा जा सकता है)

static{ // would have to be surrounded by try catch
    Class.forName("com.mysql.jdbc.Driver");   // this will load the class Driver
}

इसके अलावा कनेक्शन प्राप्त करने के माध्यम से:

conn = DriverManager.getConnection(DBURL,<username>,<password>);

लॉगिन मापदंडों को निर्दिष्ट करने के बजाय

  Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");

सादर।


2
2007 के बाद से स्थिर ब्लॉक आवश्यक नहीं है, और आप किसी भी तरह से लॉगिन मापदंडों को निर्दिष्ट कर सकते हैं।
लोरेन का

1

बदलने की कोशिश localhostकरने के लिए 127.0.0.1

लोकलहोस्ट को हल किया जाएगा ::1। और MySQL डिफ़ॉल्ट रूप से IPv6 के माध्यम से कनेक्ट नहीं किया जा सकता है।

और यहाँ का उत्पादन है telnet localhost 3306:

$ telnet localhost 3306
Trying ::1...

और MySQL सर्वर से कोई प्रतिक्रिया नहीं है।

बेशक, कृपया सुनिश्चित करें कि आपका MySQL सर्वर चल रहा है।


यह वास्तव में आपके / etc / मेजबान फ़ाइल के साथ एक समस्या है, न कि
मैसकल

@ क्रिकेट_007 डिफ़ॉल्ट रूप से, लोकलहोस्ट को 127.0.0.1 के बजाय :: 1 पर हल किया जाता है।
हाओज़े झी

1
यकीन है, केवल अगर ipv6 सक्षम है और मेजबान फ़ाइल पर निर्भर करता है
OneCricketeer

1
dbhost=jdbc:mysql://172.18.23.100:3306/yourdatabase?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
user=root
password=Password#321

con = DriverManager.getConnection(dbhost, user, password);

अगर mysql संस्करण 8 या उच्चतर उपयोगकर्ता अद्यतन कनेक्टर


यह सही उत्तर है MySQL ड्राइवर 8 या उच्चतर का उपयोग करते समय कनेक्शन स्ट्रिंग में केवल उपयोग करेंSSSS = असत्य जोड़ें।
मोहनंद

1

के लिए रिमोट Mysql के लिए कॉल

  1. जोड़े दूरस्थ उपयोगकर्ता को Mysql के लिए उदाहरण के आईपी = remoteIP से:

    mysql -u xxxx -p //local coonection to mysql
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'theNewUser'@'remoteIP' IDENTIFIED BY 'passWord';
    //Query OK, 0 rows affected (xx sec)
    mysql> FLUSH PRIVILEGES;
    //Query OK, 0 rows affected
  2. मैसूरल को रिमोट एक्सेस की अनुमति दें (डिफ़ॉल्ट रूप से सभी एक्सटर्नल कॉल की अनुमति नहीं है):

    Edit 
    /etc/mysql/mysql.conf.d/mysqld.cnf    or    /etc/mysql/my.cnf
    Change line:  bind-address = 127.0.0.1   to
                  bind-address = 0.0.0.0
    Restart Mysql: /etc/init.d/mysql restart
  3. JDBC ड्राइवर के नवीनतम संस्करण के लिए, JDBC:

    jdbc.url='jdbc:mysql://remoteIP:3306/yourDbInstance?autoReconnect=true&amp;useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC'
    jdbc.user='theNewUser'

0

मुझे वही समस्या थी, और यहाँ बताया गया है कि यह कैसे तय किया गया था:

  1. मेरे .jsp उन विशेषताओं को बुला रहे थे जिन्हें मैंने अभी तक सर्वलेट में परिभाषित नहीं किया था।
  2. मेरे पास दो कॉलम नाम थे जो मैं एक ऑब्जेक्ट में से गुजर रहा था ResultSet (getString("columnName"))जो मेरे डेटाबेस में कॉलम के नामों से मेल नहीं खाता था।

मुझे बिल्कुल यकीन नहीं है कि किसी ने समस्या को ठीक किया, लेकिन यह काम कर गया। इसके अलावा, सुनिश्चित करें कि आप एक नया Statementऔर ResultSetप्रत्येक तालिका क्वेरी के लिए बनाते हैं ।


1
(1) निश्चित रूप से इस समस्या का कारण नहीं है।
लोर्ने का

0

यह एक साधारण जार समस्या हो सकती है। हो सकता है कि आप एक पुराने का उपयोग कर रहे हैं mysql-connector-java-XXX-bin.jarजो आपके वर्तमान mysql संस्करण द्वारा समर्थित नहीं है। मैं उपयोग mysql-connector-java-5.1.18-bin.jarकर रहा हूं जैसा कि मैं उपयोग कर रहा हूं mysql 5.5और यह समस्या मेरे लिए हल हो गई है।


1
हाँ जार बेमेल का मौका हो सकता है।
किरण नूना

इन सभी ड्राइवर संस्करणों को संगत माना जाता है।
लोर्ने

0

हो सकता है कि आपने अपना मैसकल और अपाचे सर्वर शुरू नहीं किया हो। जब मैंने एक्सपीपीपी कंट्रोल पैनल से अपाचे सर्वर और मैसकल शुरू किया, तो कनेक्शन सफलतापूर्वक स्थापित किया गया था।

सौभाग्य!


0

मेरे लिए जो हल किया गया है वह 2 काम कर रहा है: 1. नए उपयोगकर्ता को कुछ पासवर्ड के साथ रूट के अलावा अन्य रूट बनाएं:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

2. mysqld.conf पर आईपी एड्रेस लाइन टिप्पणी करें

फिर नए उपयोगकर्ता नाम और पासवर्ड के साथ कनेक्ट करें। यह काम करना चाहिए।


आपको सभी दूरस्थ उपयोगकर्ताओं के लिए या लोकलहोस्ट के बजाय एक वाइल्डकार्ड जोड़ने की आवश्यकता होगी
OneCricketeer

0

यह MySQL के पुराने संस्करण ('संस्करण', '5.1.73') से जुड़ने की कोशिश कर रहा था; जब आप एक नए ड्राइवर संस्करण का उपयोग करते हैं, तो आपको एक त्रुटि मिलती है जो आपको "com.mysql.cj.jdbc.Driver" का उपयोग करने के लिए कहती है या यहां तक ​​कि आपको जो भी आप उपयोग करना है उसे जासूसी करने की आवश्यकता नहीं है:

लोड हो रहा है क्लास com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver '। ड्राइवर स्वचालित रूप से SPI के माध्यम से पंजीकृत होता है और ड्राइवर वर्ग का मैनुअल लोडिंग आमतौर पर अनावश्यक होता है।

मैंने mysql-कनेक्टर-जावा के 5.1.38 संस्करण का उपयोग करने के लिए घोषणा को बदल दिया और कोड में, मैंने com.mysql.jdbc.Driver रखा ।

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

जब मैंने अंकित जैन के उत्तर को देखा तो सभी शुरू हो गए


0

मेरा फ़ायरवॉल पोस्ट 3307 को अवरुद्ध कर रहा था जिस पर मेरा MySQL सुन रहा था। इसलिए मैंने 3307 से 3306 तक पोर्ट बदल दिया। तब मैं सफलतापूर्वक एक डेटाबेस से जुड़ सकता हूं।


0

मेरे मैकबुक में मैंने केवल इस त्रुटि को हल किया है जब ग्रहण ईई के नए संस्करण को फिर से स्थापित करें और स्थानीय सर्वरों जैसे कि xamp mysql या mamp को हटा दें लेकिन उनमें से केवल एक का उपयोग करें ...


0

मेरे मामले में मुझे दूरस्थ डेटाबेस में एक ssh सुरंग स्थापित करना था और सभी सेटिंग्स सही थीं और PhPStorm के साथ कनेक्शन का परीक्षण भी सफल रहा था। और स्कीमा भी लोड किया गया था, लेकिन डेटा नहीं। इसके बजाय मुझे मिला:

[08S01] 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.

ऊपर दिए गए सुझावों में से कोई भी काम नहीं किया। किसी भी कारण से मैंने PhpStorm को पुनः आरंभ करके समस्या को हल करने की कोशिश की और यह काम किया वॉइला!


0

मुझे कई त्रुटियाँ प्राप्त हो रही थीं जैसे:

  • CommunicationsException: Communications link failure
  • java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference at

मुझे जोड़ना था:

  • AndroidManifest.xml में <uses-permission android:name="android.permission.INTERNET"/>खुलने के बाद ही टैग शामिल करें।

  • अपने ग्रैडल (या मावेन) निर्भरता में JDBC ड्राइवर जोड़ें।

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