com।


225

আমি আমার জাভা প্রোগ্রামগুলিতে কথা বলার জন্য আমার ডাটাবেস পাওয়ার বিষয়ে কাজ করছি।

কেউ আমাকে জেডিবিসি ব্যবহার করে দ্রুত এবং নোংরা নমুনা প্রোগ্রাম দিতে পারেন?

আমি বরং একটি মূর্খ ত্রুটি পাচ্ছি:

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
আমি বোকা ছিলাম। মাইএসকিউএল সার্ভার চালু ছিল না :( এটা শুরু করার পরে সফল হয়েছে।
akfaisel

উত্তর:


251

সুতরাং, আপনি একটি আছে

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: যোগাযোগমন্ত্রী লিংক ব্যর্থতা
java.net.ConnectException: সংযোগ প্রত্যাখ্যাত হয়েছে

আমি এই উত্তরটি থেকে উদ্ধৃত করছি যা একটি ধাপে ধাপে মাইএসকিউএল + জেডিবিসি টিউটোরিয়াল রয়েছে:

আপনি যদি কোনও SQLException: Connection refusedবা Connection timed outএকটি মাইএসকিউএল নির্দিষ্ট পান CommunicationsException: Communications link failureতবে তার অর্থ ডিবি একেবারেই পৌঁছনীয় নয়। এটির নিম্নলিখিত বা একাধিক কারণ থাকতে পারে:

  1. জেডিবিসি ইউআরএলতে আইপি ঠিকানা বা হোস্টনামটি ভুল।
  2. জেডিবিসি ইউআরএল-এ হোস্ট-নেম স্থানীয় ডিএনএস সার্ভার দ্বারা স্বীকৃত নয়।
  3. জেডিবিসি ইউআরএলে পোর্ট নম্বরটি অনুপস্থিত বা ভুল।
  4. ডিবি সার্ভার ডাউন আছে।
  5. ডিবি সার্ভার টিসিপি / আইপি সংযোগ গ্রহণ করে না।
  6. ডিবি সার্ভারের সংযোগ শেষ।
  7. জাভা এবং ডিবি এর মধ্যে থাকা কিছু হ'ল সংযোগগুলি ব্লক করা, যেমন ফায়ারওয়াল বা প্রক্সি।

এক বা অন্যটিকে সমাধান করতে নীচের পরামর্শগুলি অনুসরণ করুন:

  1. তাদের যাচাই করুন এবং পরীক্ষা করুন ping
  2. ডিএনএস রিফ্রেশ করুন বা পরিবর্তে জেডিবিসি ইউআরএল আইপি ঠিকানা ব্যবহার করুন।
  3. my.cnfমাইএসকিউএল ডিবির ভিত্তিতে এটি যাচাই করুন ।
  4. ডিবি শুরু করুন।
  5. মাইএসকিএলডিটি শুরু না করা থাকলে যাচাই করুন --skip-networking option
  6. ডিবি পুনরায় চালু করুন এবং সেই অনুযায়ী এটা যে সংযোগ বন্ধ আপনার কোড ঠিক finally
  7. ফোর্টওয়াল অক্ষম করুন এবং / অথবা পোর্টটিকে অনুমতি / ফরোয়ার্ড দেওয়ার জন্য ফায়ারওয়াল / প্রক্সি কনফিগার করুন।

আরো দেখুন:


4
এমএএমপি / এমএএমপি প্রো এমএএমপি_স্কিপ-নেটওয়ার্কিং_এমএএমপি ডিফল্টরূপে সেট করে। তুমি তোমার my.cfn মধ্যে এই লাইন নিষ্ক্রিয় করতে করেছি
Jurik

6
এই ক্ষেত্রে নয়, আপনি যখন কোনও সংযোগ পুল ব্যবহার করছেন এবং দীর্ঘকালীন নিষ্ক্রিয়তার কারণে সংযোগগুলি বন্ধ হয়ে যায় তখন একটি যোগাযোগ লিঙ্ক ব্যর্থতাও ঘটে। কেবলমাত্র সে ক্ষেত্রে এটিই বলে যে "শেষ প্যাকেটটি" "X" সেকেন্ড আগে কিছু পেয়েছিল "
নাইকেল

@ নাইকেল "সংযোগ পুলে থ্রেডগুলি" নির্বাচন করুন 1 "বৈধতা কোয়েরি ফায়ার করে সক্রিয় রাখা উচিত নয়? যখন আমরা উচ্ছেদকারীকে মাইএসকিএল সার্ভারের সময়সীমার চেয়ে কম সময়ের ব্যবধানে চালানোর জন্য সেট করেছি তখন কেন তারা দীর্ঘায়িত নিষ্ক্রিয়তার দ্বারা বন্ধ হয়ে যাবে?
ফরহাদ

হ্যাঁ, একটি বৈধতা ক্যোয়ারী এটি ঠিক করবে। আমার
বক্তব্যটি কেসটি

কখনও কখনও সংযোগের স্ট্রিং থেকে পোর্ট অনুপস্থিত থাকে এবং ড্রাইভার 3306 মাইএসকিএল পোর্টের সাথে সংযোগ স্থাপনের চেষ্টা করবে এবং এই বন্দরটিতে মাইএসকিএল চলমান না থাকলে ব্যর্থ হবে। এটি আমার সমস্যা ছিল তাই আমার অন্য কারওর পক্ষে এটি দরকারী মনে হলেও আমি উল্লেখ করা উচিত।
আব্দুল মান্নান

10

জাভা heেকে না ফেলে আমি এই ব্যতিক্রমটি ধরি। আমি যদি অনেকগুলি ডেটা র‍্যামে রাখার চেষ্টা করি - প্রথমে আমি " যোগাযোগ লিংক ব্যর্থতা " এবং তারপরে " আউটআফমিউরিওরর " ধরি

আমি এটি লগইন করেছি এবং আমি মেমরির খরচ হ্রাস করেছি (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 এ: বর্তমানে, আমি মাইএসকিউএল ওয়ার্কবেঞ্চ ব্যবহার করছি 6.3। আমি সমাধানটি যাচাই করতে এখানে এসেছি তবে আমি এটি নিজে থেকেই পেয়েছি, এটি ঠিক যে আপনার মাইএসকিউএল সার্ভারটি চলছে না বা এটি বন্ধ হয়ে গেছে। আমি আমার সার্ভারটি আবার চালু করেছি এটি একটি কবজির মতো কাজ করেছে।
অভিষেক একান্থ

7
এটাই 'সেরা সমাধান' কেন? এটি কোন সমস্যার সমাধান করে এবং কীভাবে?
লার্নের মারকুইস

এই সমাধান ডেটাফ্রেমগুলি তৈরি করতে পারে না
অ্যালান

8

com.mysql.jdbc.exceptions.jdbc4.CommunicationsExceptionআপনার ডাটাবেস সংযোগ দীর্ঘ সময়ের জন্য অলস থাকলে এই ব্যতিক্রম ঘটে।

এই নিষ্ক্রিয় সংযোগটি সত্য হয়ে যায় connection.isClosed();তবে আমরা যদি বিবৃতিটি কার্যকর করার চেষ্টা করি তবে এটি এই ব্যতিক্রমটিকে সরিয়ে দেবে তাই আমি ডাটাবেস পুলিংয়ের সাথে যেতে পরামর্শ দেব।


2
এটি 'সংযোগ অস্বীকার' এর মতো অন্যান্য কারণেও ঘটে।
লার্নের মারকুইস

6

আমি কয়েক ঘন্টা ধরে একই সমস্যা করছি। আমি এমএএমপি সার্ভার ব্যবহার করছি

লোকালহোস্ট ব্যবহার করার পরিবর্তে: [অ্যাপাচি পোর্ট], আপনার মাইএসকিউএল পোর্টটি ব্যবহার করুন।

নীচে এমএএমপি সার্ভারের জন্য ডিফল্ট মাইএসকিউএল পোর্ট রয়েছে।

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

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

আপনার যদি মাইএসকিএল ইনস্টল করার আগে ম্যাম্প থাকে তবে এই পদ্ধতিটি ব্যবহার করে দেখুন
ডেভিস বেনি 15MIS0426

5

আমি এখানে ভুল গাছটি বার করতে চাইছি তবে আপনার ব্যতিক্রমটি আপনার মাইএসকিউএল সার্ভারটি উপলভ্য নয় বলে মনে হচ্ছে।

থ্রেড "মূল" com.mysql.jdbc.exferences.jdbc4. কম্যুনিফিকেশন এক্সেপশন: যোগাযোগ লিঙ্ক ব্যর্থতা সর্বশেষে প্যাকেটটি সার্ভারে সফলভাবে প্রেরণ করা হয়েছিল 0 মিলিসেকেন্ড আগে। ড্রাইভার সার্ভার থেকে কোনও প্যাকেট গ্রহণ করেনি। এ ...

যদি আপনি চেষ্টা করেন (টার্মিনাল থেকে)

mysql -u username -p

আপনাকে ব্যবহারকারীর নামটির সাথে সম্পর্কিত পাসওয়ার্ডের জন্য অনুরোধ জানানো হবে। আপনি সঠিক পাসওয়ার্ড দেওয়ার পরে কি মাইএসকিএল ক্লায়েন্ট সংযুক্ত হয়?

যদি না হয় তবে আপনি পছন্দগুলি থেকে মাইএসকিউএল শুরু করতে পারেন। আপনি এটি স্টার্টআপ চলাকালীন সেট করতে পারেন।


1
আমি আমার মাইএসকিউএল সার্ভার চালানোর জন্য এমএএমপি ব্যবহার করছি। এটা কি কোন সমস্যা হবে?
জোশ কে

আমি যখন (সিক্যুয়াল প্রো এর মাধ্যমে) আমার সংযোগ করি তখন আমি 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>

এবং আমার মাইএসকিউএল সংস্করণটি ছিল 5.1.48 (হ্যাঁ, এটি পুরানো, কেবলমাত্র পণ্যের সংস্করণ নকল করার জন্য)। সুতরাং আমি একই ত্রুটি পূরণ।

কারণটি খুঁজে পাওয়া গেছে, এর সমাধানও পাওয়া গেছে। সংস্করণ মিল!


4
অসম্ভাব্য। এই সমস্ত ড্রাইভার সংস্করণগুলি পিছনের দিকে সামঞ্জস্যপূর্ণ বলে মনে করা হচ্ছে।
মারকুইস

1
এই সমস্যাটি নতুন মাইএসকিএল সংযোগকারীগুলিতে স্থির হয়ে গেছে বলে মনে হচ্ছে, দেখুন স্ট্যাকওভারফ্লো.com
নিশি

আমার ক্ষেত্রেও একই ঘটনা। ড্রাইভারের সংস্করণটি মাইএসকিউএল 5 এর জন্য রয়েছে যখন সার্ভারের সংস্করণটি 8 So তাই আমি জারের সংস্করণটি আপডেট করেছি এবং সমস্যার সমাধান করেছি।
এডেনপ্যান

4

আমি একই ত্রুটি পেয়েছি কারণ আমি মাইএসকিএল সার্ভার শুরু না করেই আমার প্রোগ্রামটি চালানোর চেষ্টা করছিলাম।

মাইএসকিএল সার্ভার শুরু করার পরে, সবকিছু ঠিকঠাক হয়ে গেছে।


4

পূর্বের উত্তরগুলি যথাযথ। তবে, আমি আরও সাধারণ বিষয়গুলির দিকে ইঙ্গিত করতে চাই।

আমি অনুরূপ সমস্যার মুখোমুখি হয়েছিল এবং কারণটি আমার কোম্পানির একটি নেটওয়ার্ক বিধিনিষেধ ছিল।

আমি অন্য কোনও নেটওয়ার্কে থাকাকালীন একই সংযোগটি সফল হয়ে উঠছিল।


1
এই পয়েন্টারটি আমার সমস্যার সমাধান করেছে, উল্লেখ করে যে 'লোকালহোস্ট' কাজ করছে যখন আমি ভিপিএন-তে সংযোগ স্থাপন করব, কিন্তু আমি ভিপিএন থেকে সংযোগ বিচ্ছিন্ন না করলে এটি কাজ করছে না, তবে আমি 'লোকালহোস্ট' পরিবর্তন করে '127.0.0.1' এ স্থির করেছি
gannu_lee

4

আপনার আইপি ঠিকানাটি /etc/mysql/my.cnf ফাইলে আপডেট করুন

bind-address  = 0.0.0.0

মাইএসকিএল ডিমন এবং মাইএসকিএল পরিষেবাগুলি পুনরায় চালু করুন।


1
বৈধ বাইন্ড ঠিকানা ব্যবহারের জন্য সম্পাদনা করা হয়েছে
ওয়ান ক্রিকেটার

3

ডাউনলোড মাইএসকিউএল-JDBC এর প্রকার-4-Treiber (Ig 'মাইএসকিউএল-সংযোগকারী-জাভা 5.1.11-bin.jar' 'mysql-connector-java-5.1.11.zip' থেকে) এ মাইএসকিউএল

আপনার ক্লাসপথে সংকলন এবং রানটাইম চলাকালীন আপনাকে ড্রাইভার জারের উপর চাপ দেওয়া দরকার।

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" );

না, আমাকে কিছু না পেয়ে ত্রুটির ঝড় দেয় gives এটি কি জআআর ফাইল ছাড়াই আমদানি করা সম্ভব হবে?
জোশ কে

@ জোশ এটি কাজ করে, আপনার ক্লাসপথটি সঠিকভাবে সেটআপ করা দরকার। (অথবা আপনার% JAVA_HOME% \ jre \ lib \ ext ডিরেক্টরিতে জারটি অনুলিপি করুন, তবে এটি খারাপ অনুশীলন হিসাবে বিবেচনা করা হয়)
স্ট্যাকার

3

জাভা এসএসএল-এর মাধ্যমে মাইএসকিউএলে কানেক্ট করার চেষ্টা করলেও এই ত্রুটিটি ঘটতে পারে তবে কিছু ভুল হয়ে যায়। (আমার ক্ষেত্রে, আমি মাইএসকিউএলে পেয়ারা সার্ভার 5.193.1 সংযোগ পুলগুলি কনফিগার করছি))

কিছু লোক সেট করার পরামর্শ দিলেন useSSL=false। তবে সংযোগকারী / জে সংস্করণ থেকে 8.0.13, সেটিংটি হ্রাস করা হয়েছে। এখানে মাইএসকিউএল সংযোগকারী / জে 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, এবং এটি উত্তরাধিকার সেটিংস সমতূল্য যা সংযোগকারী / জে 8.0.12 জন্য তাদের ডিফল্ট সেটিংস থেকে ভিন্ন এবং কিছু পরিস্থিতিতে আগে,। উত্তরাধিকারের বৈশিষ্ট্যগুলি ব্যবহার করা এবং তাদের পুরানো ডিফল্ট সেটিংসের উপর নির্ভর করা অ্যাপ্লিকেশনগুলি পর্যালোচনা করা উচিত।useSSL=true , requireSSL=falseএবংverifyServerCertificate=false

লিগ্যাসির বৈশিষ্ট্যগুলি sslModeস্পষ্টভাবে সেট করা থাকলে তা উপেক্ষা করা হবে । যদি কোনওটিই sslModeবা useSSLস্পষ্টভাবে সেট না করা থাকে তবে ডিফল্ট সেটিংস sslMode=PREFERREDপ্রযোজ্য।

ডিফল্ট :PREFERRED

সংস্করণ থেকে : 8.0.13

সুতরাং, আমার ক্ষেত্রে, sslMode=DISABLEDসমস্যাটি সমাধানের জন্য আমার প্রয়োজনীয় সেটিংসই ছিল। এটি একটি পরীক্ষা মেশিনে ছিল। তবে উত্পাদনের জন্য, নিরাপদ সমাধানটি SSL ব্যবহারের জন্য জাভা ক্লায়েন্ট এবং মাইএসকিউএল সার্ভারকে সঠিকভাবে কনফিগার করবে।


লক্ষ্য করুন যে এসএসএল অক্ষম করে আপনাকে সেটও করতে হতে পারে allowPublicKeyRetrieval=true। (আবার, সুরক্ষার দিক থেকে কোনও বুদ্ধিমান সিদ্ধান্ত নয়)। আরও তথ্য দেওয়া হয়মাইএসকিউএল কানেকশনস্ট্রিং বিকল্পগুলিতে :

AllowPublicKeyRetrieval

যদি ব্যবহারকারী অ্যাকাউন্ট sha256_passwordপ্রমাণীকরণ ব্যবহার করে তবে পাসওয়ার্ডটি সংক্রমণকালে সুরক্ষিত রাখতে হবে; টিএলএস হ'ল এটির জন্য পছন্দের প্রক্রিয়া, তবে এটি যদি না পাওয়া যায় তবে আরএসএ পাবলিক কী এনক্রিপশন ব্যবহার করা হবে। সার্ভারের আরএসএ সর্বজনীন কী নির্দিষ্ট করতে, ServerRSAPublicKeyFileসংযোগ স্ট্রিং সেটিংটি ব্যবহার করুন বা AllowPublicKeyRetrieval=Trueক্লায়েন্টকে স্বয়ংক্রিয়ভাবে সার্ভার থেকে সর্বজনীন কীটির জন্য অনুরোধ করার জন্য সেট করুন । নোট যে AllowPublicKeyRetrieval=Trueপ্লেইনেক্সট পাসওয়ার্ড পেতে একটি দূষিত প্রক্সি একটি MITM আক্রমণ চালানোর অনুমতি দিতে পারে, সুতরাং এটি ডিফল্টরূপে মিথ্যা এবং স্পষ্টভাবে সক্ষম করা আবশ্যক।



3

আমার একই সমস্যাটি নিম্নলিখিত পদক্ষেপগুলি দ্বারা সমাধান করা হয়েছে:

  1. যাও my.cnf

    vi /etc/mysql/my.cnf
  2. এর বাইন্ড-ঠিকানাটি সংশোধন করুন

    "bind-address = 0.0.0.0"
  3. মাইএসকিউএল পুনরায় চালু করুন

    sudo /etc/init.d/mysql restart

2

আপনি যদি মাইএসকিএল ডাটাবেস ইনস্টল করতে সার্ভার ব্যবহার করেন WAMPবা করেন XAMP। তারপরে আপনাকে স্পষ্টভাবে মাইএসকিএল সেভ করতে হবে com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureযা ডাটাবেসের সাথে সংযোগের সময় প্রদর্শিত হবে wise


2

আমি এই সমস্যাটি একটি সহজ উপায়ে সমাধান করেছি, যা আমার পক্ষে কাজ করেছিল। আমার কাছে seme সমস্যা ছিল "com.mysql.jdbc.exception.jdbc4. যোগাযোগ ব্যবস্থা: যোগাযোগ লিঙ্ক ব্যর্থতা"। আমার db.properties ফাইলে আমার এই ছিল: url: jdbc: mysql: // লোকালহোস্ট: 90 / মাইডিবি, কেবল পোর্ট ইউআরএল সরিয়েছে, ফলে এই পদ্ধতিটি ইউআরএল: জেডিবিসি: মাইএসকিএল: // লোকালহস্ট / মাইডিবি এবং এটি আমার পক্ষে কাজ করেছে ।


2

আমার যখন ঘটেছিল তখন আমি মাইএসকিএল পোর্টটি 3306 থেকে 3307 থেকে my.ini এবং php.ini ফাইলগুলিতে পরিবর্তন করেছি তবে পোর্টগুলি পরিবর্তন করার পরে (3307-> 3306) এটি আবার ভাল কাজ করেছে।


2

আপনি যদি আপনার বন্দরটি পরিবর্তন করেন তবে আপনি এই জাতীয় ত্রুটি পেয়েছেন "com.mysql.jdbc.exferences.jdbc4. যোগাযোগ ব্যবস্থা: ব্যয় সংযোগ ব্যর্থতা" দয়া করে আপনার বন্দর নম্বর পরীক্ষা করুন


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। এবং মাইএসকিউএল ডিফল্টরূপে আইভিভি 6 এর মাধ্যমে সংযুক্ত হতে পারে না।

এবং এখানে ফলাফল telnet localhost 3306:

$ telnet localhost 3306
Trying ::1...

এবং মাইএসকিউএল সার্ভার থেকে কোনও প্রতিক্রিয়া নেই।

অবশ্যই, আপনার মাইএসকিউএল সার্ভার চলছে কিনা তা নিশ্চিত করুন।


এটি আসলে আপনার / ইত্যাদি / হোস্ট ফাইলের সাথে সমস্যা,
মাইএসকিএল

@ ক্রিকেট_007 ডিফল্টরূপে, লোকালহোস্ট 127.0.0.1 এর পরিবর্তে :: 1 এ সমাধান করা হবে।
হাওজে জেই

1
অবশ্যই, কেবলমাত্র
আইপিভি

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 বা ততোধিকতর ব্যবহারকারী আপডেট করা সংযোজক


এটি সঠিক উত্তরটি মাইএসকিউএল ড্রাইভার 8 বা ততোধিক ড্রাইভার ব্যবহার করার সময় সংযোগের স্ট্রিংয়ে useSSL = মিথ্যা যুক্ত করুন।
মোহনন্দ

1

জন্য রিমোট মাইএসকিউএল কল

  1. যোগ দূরবর্তী ব্যবহারকারী থেকে মাইএসকিউএল জন্য উদাহরণস্বরূপ আইপি = 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.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-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 এ আইপি ঠিকানা লাইন মন্তব্য করুন

তারপরে নতুন ব্যবহারকারীর নাম এবং পাসওয়ার্ডের সাথে সংযুক্ত করুন। এটি কাজ করা উচিত.


আপনার সমস্ত রিমোট ব্যবহারকারীদের জন্য এটি পুনরাবৃত্তি করতে হবে বা
লোকালহোস্টের

0

এটি মাইএসকিউএল ('সংস্করণ', '5.1.73') এর পুরানো সংস্করণে সংযোগ দেওয়ার চেষ্টা করছিল; আপনি যখন একটি নতুন ড্রাইভার সংস্করণ ব্যবহার করেন আপনি এমন একটি ত্রুটি পান যা আপনাকে "com.mysql.cj.jdbc.Driver ব্যবহার করতে বলে বা এমনকি আপনি কোনটি ব্যবহার করতে চান তা নির্ধারণ করতে হবে না:

com.mysql.jdbc.Driver'. This is deprecated. The new driver class isCom.mysql.cj.jdbc.Driver ' ক্লাস লোড হচ্ছে । ড্রাইভারটি স্বয়ংক্রিয়ভাবে এসপিআই এর মাধ্যমে নিবন্ধিত হয় এবং ড্রাইভার শ্রেণীর ম্যানুয়াল লোডিং সাধারণত অপ্রয়োজনীয়।

আমি ঘোষণাপত্রটি মাইএসকিএল-সংযোজক-জাভা 5.1.38 সংস্করণ ব্যবহার করার জন্য পরিবর্তন করেছিলাম এবং কোডটিতে , আমি com.mysql.jdbc.Driver রেখে দিয়েছিলাম

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

অঙ্কিত জৈনের উত্তর দেখে যখন সমস্ত শুরু হয়েছিল


0

আমার ফায়ারওয়াল 3307 পোস্টটি ব্লক করে যা আমার মাইএসকিউএল শুনছে। সুতরাং আমি 3307 থেকে 3306 বন্দর পরিবর্তন করেছি hen তখন আমি সফলভাবে একটি ডাটাবেসে সংযোগ করতে পারি।


0

আমার ম্যাকবুকটিতে আমি এই ত্রুটিটি কেবল তখনই সমাধান করেছি যখন Eclipse EE এর নতুন সংস্করণটি পুনরায় ইনস্টল করুন এবং xmp mysql বা mamp এর মতো স্থানীয় সার্ভারগুলি সরিয়ে ফেলুন তবে সেগুলির মধ্যে একটি মাত্র ব্যবহার করুন ...


0

আমার ক্ষেত্রে আমাকে দূরবর্তী ডাটাবেসে একটি এসএস টানেল স্থাপন করতে হয়েছিল এবং সমস্ত সেটিংস সঠিক ছিল এবং পিএইচপিস্টোরমের সাথে সংযোগের পরীক্ষা করাও সফল হয়েছিল। এবং স্কিমাটি লোড করা হয়েছিল, তবে ডেটা নয়। পরিবর্তে আমি পেয়েছি:

[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.

উপরোক্ত পরামর্শগুলির মধ্যে কোনওটি কাজ করেনি। যে কোনও কারণে আমি পিএইচপিস্টর্ম এবং ভয়েলা এটি পুনরায় চালু করে সমস্যাটি সমাধান করার চেষ্টা করেছি!


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"/>এ খোলার ম্যানিফেস্ট ট্যাগের ঠিক পরে অন্তর্ভুক্ত ।

  • আপনার গ্রেডল (বা মাভেন) নির্ভরতাগুলিতে জেডিবিসি ড্রাইভার যুক্ত করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.