টমকেটের মাধ্যমে বা বাহ্যিকভাবে জেডিবিসি সংযোগকারীটির মাধ্যমে মাইএসকিএল সংযোগ করতে অক্ষম


17

আমি একটি স্টক মাইএসকিএল 5.5 ইনস্টলেশন ইনস্টল করেছি এবং আমি যখন মাইএসকিএল কমান্ডের মাধ্যমে মাইএসকিএল সার্ভিসে সংযোগ করতে পারি এবং পরিষেবাটি চলমান বলে মনে হচ্ছে, আমি স্প্রিং + টমক্যাট বা বাহ্যিক জেডিবিসি সংযোগকারীটির মাধ্যমে এটির সাথে সংযোগ করতে পারি না।

আমি নিম্নলিখিত URL টি ব্যবহার করছি:

jdbc:mysql://myserver.com:myport/mydb

যথাযথ ব্যবহারকারীর নাম / পাসওয়ার্ড সহ তবে আমি নিম্নলিখিত বার্তাটি পেয়েছি:

server.com: 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.

এবং টমক্যাট নিক্ষেপ:

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.
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)

যা একই সমস্যা বলে মনে হচ্ছে যেন আমি বাহ্যিকভাবে সংযোগ দেওয়ার চেষ্টা করি।


জাভাটি আমার মাইএসকিএল ডাটাবেসে যা আমার ল্যানের অন্য একটি সার্ভারে চলে তার সাথে সংযোগ করার চেষ্টা করার সময় আমি এই সমস্যার মুখোমুখি হয়েছি। সার্ভারে একই জাভা প্রোগ্রামটি চালানোর সময় যা মাইএসকিএল চালায় এটি সমস্যা ছাড়াই সংযুক্ত ছিল। বাহ্যিক মেশিন থেকে আমি এসকিউএলইগ ব্যবহার করে মাইএসকিএল ডাটাবেসে সংযোগ করতে পারতাম (উদাহরণস্বরূপ, যদিও প্রথমে আমার সিএনএফ ফাইলটি 127.0.0.1 এর পরিবর্তে 0.0.0.0 এ আবদ্ধ করতে হয়েছিল)। বোডেনের উত্তর এবং জেডিবিসি সংযোগকারী পরিবর্তন করার বিষয়ে মন্তব্য আমাকে সঠিক দিকে নির্দেশ করেছে। আমি জেডিবিসি সংযোগকারীটিকে সর্বশেষতম সংস্করণে পরিবর্তন করেছি এবং হঠাৎ এটি কার্যকর হয়েছে!
ব্যবহারকারী 2380870

উত্তর:


18

এটি বিভিন্ন কারণে ঘটতে পারে। আমি কয়েক সপ্তাহ আগে এটি নিজে দেখেছি তবে আমার জন্য ঠিক কী ছিল তা আমি মনে করতে পারি না।

1) মাইএসকিএল দ্বারা আবদ্ধ ঠিকানাটি যাচাই করুন, এটি সম্ভবত 127.0.0.1 (কেবলমাত্র) যা আমি বিশ্বাস করি এটি ডিফল্ট (কমপক্ষে স্ট্যান্ডার্ড উবুন্টু সার্ভারে) is সমস্ত উপলভ্য ঠিকানাগুলিকে আবদ্ধ করতে আপনাকে my.cnf- এ বাইন্ড-ঠিকানা প্যারামিটারটি মন্তব্য করতে হবে (আপনি একাধিকটি চয়ন করতে পারবেন না, এটি এক বা সমস্ত)।

2) যদি এটি 127.0.0.1 এ আবদ্ধ থাকে এবং আপনি "লোকালহোস্ট" ব্যবহার করে সংযোগ করতে পারবেন না, নিশ্চিত করুন এটি আইপিভি 4 এর পরিবর্তে আইপিভি 6 লোকালহোস্ট ঠিকানার সাথে সমাধান করছে না। (বা কেবল আইপি ঠিকানা ব্যবহার করুন)

3) মাইএসকিএল যে পোর্টটি শুনছে তাতে ডাবল এবং ট্রিপল-চেক করুন।

4) নিশ্চিত করুন যে আপনি আপনার জেডিকে জন্য সঠিক জেডিবিসি সংযোগকারী ব্যবহার করছেন।

5) নিশ্চিত করুন যে আপনি --স্কিপ-নেটওয়ার্কিংয়ের সাথে মাইএসকিএল শুরু করার মতো সত্যই কিছু নিখুঁতভাবে করছেন না।

আমি মনে করি আমার প্রথম পরামর্শটিতে সর্বাধিক প্রতিশ্রুতি রয়েছে ... আসলে আমি মনে করি এটি সেখানেই আমি দেখেছি ... আমি মাইএসকিএল থেকে দূরবর্তীভাবে সংযুক্ত হওয়ার চেষ্টা করছিলাম (উবুন্টু ৮.০৪ তেও))


শুধু আমার 2 শতাংশ যোগ করতে, 4 তম আমার জন্য কাজ করেছিল। ধন্যবাদ!
জ্যানিস পিসেনিকস

1
"সমস্ত উপলব্ধ ঠিকানার সাথে আবদ্ধ করতে আপনাকে my.cnf- এ বাইন্ড-ঠিকানা প্যারামিটারটি মন্তব্য করতে হবে" সম্পর্কিত, ডিফল্টটি এখন কেবল লোকালহোস্টে শুনতে হবে, সুতরাং আপনার "বাইন্ড-ঠিকানা = 0.0" রেখাটি ব্যবহার করতে হতে পারে। [Mysqld] এর মধ্যে 0.0 "।
Palo

13

আমার দুটি প্রোগ্রামেও আমার একই সমস্যা ছিল। আমার ত্রুটিটি এটি ছিল:

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.

আমি এই সমস্যাটি সমাধান করতে কিছু দিন ব্যয় করেছি। আমি বিভিন্ন ওয়েব সাইটগুলিতে উল্লিখিত অনেকগুলি পদ্ধতির পরীক্ষা করেছি, তবে সেগুলির কোনওটিই কাজ করে না। অবশেষে আমি আমার কোড পরিবর্তন করেছি এবং খুঁজে পেয়েছি কী সমস্যা ছিল। আমি আপনাকে বিভিন্ন পদ্ধতির সম্পর্কে বলার চেষ্টা করব এবং সেগুলি এখানে সংক্ষিপ্ত করব

আমি যখন এই ত্রুটির সমাধান অনুসন্ধান করার জন্য ইন্টারনেটটি খুঁজছিলাম তখন আমি বুঝতে পেরেছিলাম যে অনেকগুলি সমাধান রয়েছে যা কমপক্ষে একজন ব্যক্তির পক্ষে কাজ করেছে, তবে অন্যরা বলে যে এটি তাদের পক্ষে কার্যকর হয় না! কেন এই ত্রুটি অনেক পন্থা আছে? সার্ভারের সাথে সংযোগ করার ক্ষেত্রে সমস্যা দেখা দিলে সাধারণত এই ত্রুটিটি ঘটতে পারে বলে মনে হয় । সমস্যাটি ভুল কোয়েরি স্ট্রিং বা ডাটাবেসের সাথে অনেক বেশি সংযোগের কারণে।

সুতরাং আমি আপনাকে পরামর্শ দিচ্ছি যে সমস্ত সমাধানগুলি একে একে চেষ্টা করে দেখুন এবং হাল ছাড়বেন না!

আমি ইন্টারনেটে এবং সেগুলির প্রত্যেকটির জন্য যে সমাধানগুলি পেয়েছি তা এখানে রয়েছে, কমপক্ষে এমন ব্যক্তির উপরে আছেন যিনি তার সমস্যার সমাধান করেছেন।

পয়েন্ট: আপনার যে মাইএসকিউএল সেটিংস পরিবর্তন করতে হবে সেই সমাধানগুলির জন্য, আপনি নিম্নলিখিতটি উল্লেখ করতে পারেন:

  • লিনাক্স: /etc/my.cnf

  • উইন্ডোজ: ডি: \ প্রোগ্রাম ফাইল \ mysql \ বিন \ my.ini

সমাধানগুলি এখানে:

  • "বাইন্ড-ঠিকানা" বৈশিষ্ট্য পরিবর্তন করা

মন্তব্য না করে "বাইন্ড-অ্যাড্রেস" বৈশিষ্ট্য বা এটিকে নিম্নলিখিত আইপিএসের মধ্যে একটিতে পরিবর্তন করুন:

বেঁধে-ঠিকানা = "127.0.0.1"

অথবা

বেঁধে-ঠিকানা = "0.0.0.0"

  • "স্কিপ-নেটওয়ার্কিং" মন্তব্য করে

আপনার মাইএসকিউএল কনফিগারেশন ফাইলে যদি কোনও "স্কিপ-নেটওয়ার্কিং" লাইন থাকে তবে সেই লাইনের শুরুতে "#" চিহ্ন যোগ করে মন্তব্য করুন।

  • "অপেক্ষা_সমাপ্তি" এবং "ইন্টারেক্টিভ_টাইমআউট" পরিবর্তন করুন

এই লাইনগুলি মাইএসকিউএল কনফিগারেশন ফাইলে যুক্ত করুন:

অপেক্ষা_টাইমআউট = সংখ্যা

ইন্টারেক্টিভ_টাইমআউট = সংখ্যা

কানেক্ট_টাইমআউট = সংখ্যা

  • অপারেটিং সিস্টেমের প্রক্সি সেটিংস পরীক্ষা করুন

নিশ্চিত করুন যে অগ্নি প্রাচীর, বা অ্যান্টি ভাইরাস সফট ওয়ারিয়াসগুলি মাইএসকিউএল পরিষেবাটিকে অবরুদ্ধ করে না।

  • সংযোগ স্ট্রিং পরিবর্তন করুন

আপনার প্রশ্নের স্ট্রিং পরীক্ষা করুন। আপনার সংযোগ স্ট্রিং এই জাতীয় কিছু হওয়া উচিত:

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

সাধারণত মাইএসকিউএলের জন্য ডিফল্ট পোর্ট 3306।

আপনার মাইএসকিউএল সার্ভারের ব্যবহারকারীর নাম এবং পাসওয়ার্ডে ব্যবহারকারীর নাম এবং পাসওয়ার্ড পরিবর্তন করতে ভুলবেন না।

  • আপনার জেডিকে ড্রাইভার লাইব্রেরি ফাইল আপডেট করুন
  • বিভিন্ন জেডিকে এবং জেআরই পরীক্ষা করুন (জেডিকে 6 এবং 7 এর মতো)
  • ম্যাক্স_গ্ল্যাড_প্যাকেটটি পরিবর্তন করবেন না

" ম্যাক্স_নয়েড_প্যাককেট " মাইএসকিউএল কনফিগারেশন ফাইলে একটি পরিবর্তনশীল যা সর্বাধিক প্যাকেটের আকার নির্দেশ করে, সর্বোচ্চ প্যাকেটের সংখ্যা নয়। সুতরাং এই ত্রুটিটি সমাধান করতে সাহায্য করবে না।

  • টমক্যাট সুরক্ষা পরিবর্তন করুন

TOMCAT6_SECURITY = হ্যাঁ TOMCAT6_SECURITY = না থেকে পরিবর্তন করুন

  • বৈধতা কুইরি সম্পত্তি ব্যবহার করুন

প্রতিটি ক্যোয়ারীর প্রতিক্রিয়া রয়েছে তা নিশ্চিত করতে বৈধতা কুইকরি = "এখনই নির্বাচন করুন ()" ব্যবহার করুন

  • সরাসরি পুনর্যোগাযোগ

আপনার সংযোগের স্ট্রিংয়ে এই কোডটি যুক্ত করুন:

&autoReconnect=true&failOverReadOnly=false&maxReconnects=10

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

তবে আমার সমস্যার সমাধান কী? আমার সমস্যাটি হ'ল ডেটাবেজে আমার অনেকগুলি নির্বাচন ছিল। প্রতিবার আমি সংযোগ তৈরি করেছি এবং তারপরে এটি বন্ধ করে দিয়েছি। যদিও আমি প্রতিবার সংযোগটি বন্ধ করে দিয়েছি, তবে সিস্টেমটি অনেক সংযোগের মুখোমুখি হয়েছিল এবং আমাকে সেই ত্রুটি দিয়েছে। আমি যা করেছি তা হ'ল আমি আমার সংযোগ ভেরিয়েবলটিকে পুরো ক্লাসের জন্য সর্বজনীন (বা বেসরকারী) ভেরিয়েবল হিসাবে সংজ্ঞায়িত করেছি এবং এটি কনস্ট্রাক্টরটিতে আরম্ভ করেছি। তারপরে প্রতিবার আমি কেবল সেই সংযোগটি ব্যবহার করেছি। এটি আমার সমস্যা সমাধান করেছে এবং আমার গতি নাটকীয়ভাবে বাড়িয়েছে।

উপসংহার

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


আমারও এই সমস্যা ছিল! তবে আমি প্রাথমিকভাবে 3306 এর পরিবর্তে 8888 বন্দরটি শুনতে মাইএসকিএল পরিবর্তন করেছি S ধন্যবাদ একটি গুচ্ছ

এটি আমার জন্য সমস্যার সমাধান! আমাদের ভ্যাগ্র্যান্ট হোমস্টেড সেটআপের সাথে এটি কোনও কারণে লোকহোস্টের পরিবর্তে ভিএমকে দেওয়া ঠিকানার (আমার ক্ষেত্রে 10.0.2.15) বাধ্যতামূলক ছিল।
ল্যান্ডার

1

আপনি যদি একটি লিনাক্স ইনস্টলেশন চালাচ্ছেন তবে আপনার সম্ভবত এসএসএইচ ছাড়া লক্কিটের আগত যোগাযোগগুলি অবরুদ্ধ করা হবে।

রুট হিসাবে লগ ইন করুন, এবং প্রম্পট থেকে কমান্ড লককিট চালান, ফায়ারওয়াল এবং এসিলিনাক্স অক্ষম করুন এবং দেখুন আপনার একই সমস্যা আছে কিনা।

এছাড়াও আপনার অনুমতিগুলি সঠিকভাবে সেট করা হয়েছে তা পরীক্ষা করুন, যাতে সবকিছু সঠিক স্থানে লিখতে পারে।


আমি উবুন্টু 8.04 চালাচ্ছি। আমার সম্ভবত এটি উল্লেখ করা উচিত ছিল। আপনার কি সেই ডিসট্রোর নির্দিষ্ট নির্দেশ রয়েছে? আমি এক মুহুর্তে গুগল করব, তবে আমি ভেবেছিলাম আগে জিজ্ঞাসা করব।
স্টেফান কেন্ডাল

sudo ufw disable উবুন্টু ফায়ারওয়াল অক্ষম করবে
স্টিফেন থম্পসন

আমি ইউএফডাব্লু ইনস্টল করেছি এবং বন্দরটি সক্ষম করার চেষ্টা করেছি, তবে কোনও পাশা নেই।
স্টেফান কেন্ডাল

ufw এবং iptables ইতিমধ্যে আনইনস্টল করা হয়েছিল। আমি ভেবেছিলাম ইউএফডাব্লু একটি পরিচালন সরঞ্জাম যা আলাদাভাবে ইনস্টল করতে হবে to নিশ্চিতভাবেই, "iptables" এর দ্বারা কোনও কমান্ড পাওয়া যায়নি এবং কোনও iptables পরিষেবা চলমান বলে মনে হয় না।
স্টেফান কেন্ডাল

ঠিক আছে অবশেষে যে জিনিসটি আমি প্রায়শই পেয়েছি তা হ'ল আপনি মাইএসকিএলকে এথ0 ইন্টারফেসে শুনতে সক্ষম করেন না এবং প্রায়শই এটি কেবল লোকাল হোস্ট ইন্টারফেসে। নিম্নলিখিত চেষ্টা করুন। Jdbc: mysql: //myserver.com: myport / mydb to jdbc: mysql: // localhost: myport / mydb যদি এটি কাজ করে তবে আপনাকে নিম্নলিখিত dev.mysql.com/doc/refman/5.1/en/ করতে হবে সার্ভারের সাথে সংযোগ স্থাপন করতে পারবেন না
স্টিফেন থমসন

1

মাইএসকিএল-জেডিবিসি ড্রাইভারের 5.1.9 সংস্করণে এই বিশাল বাগটি রয়েছে:

http://bugs.mysql.com/bug.php?id=47494


1

এটি ভুল প্রক্সি সেটিংসের কারণেও হতে পারে । আমার ম্যাকের সমান্তরাল ভার্চুয়াল অ্যাপ্লায়েন্সে চলমান একটি মাইএসকিউএল ইনস্ট্যান্সের সাথে জেডিবিসির মাধ্যমে সংযোগ স্থাপনের চেষ্টা করতে আমার এই সমস্যা হয়েছে। Jdbc সংযোগটি সিস্টেম-স্তরের নেটওয়ার্ক সেটিংস ব্যবহার করে এবং যেহেতু আমি একটি SOCKS প্রক্সিটির পিছনে ছিলাম আমাকে মাইএসকিএল হোস্টটিকে একটি নন-প্রক্সি হোস্ট হিসাবে সেট করতে হয়েছিল (উদাহরণস্বরূপ, ম্যাকের উপর আপনি সেটিংস-> নেটওয়ার্ক-> অ্যাডভান্সড- এ কনফিগার করতে পারেন) > প্রক্সিগুলি এবং শেষ পর্যন্ত "এই হোস্ট এবং ডোমেনগুলির বাইপাস প্রক্সি সেটিংসে" হোস্টনাম বা আইপি ঠিকানা যুক্ত করুন)।


1

মাইএসকিউএল সংযোগকারী / জে কেবলমাত্র টিসিপি / আইপি সমর্থন করে জাভা ইউনিক্স ডোমেন সকেট সংযোগ সমর্থন করে না

যদি এমওয়াইএসকিউএলটি স্কিপ-নেটওয়ার্কিং ফ্ল্যাগ দিয়ে শুরু করা হয় বা মাইএসকিউএল ফায়ারওয়ালের পিছনে চলতে থাকে, তবে টিসিপি / আইপি বিকল্পটি অক্ষম করা হবে। যাতে জাভা মাইএসকিউএল এর সাথে যোগাযোগ করতে না পারে।


0

আমার প্রায় একদিনের মতো একই সমস্যা ছিল এবং এটি আমাকে পাগল করেছিল! তবে আমি সমাধানটি সন্ধান করতে পেরেছি, এবং এটি খুব সহজ ছিল, TOMCAT6_SECURITY = হ্যাঁ TOMCAT6_SECURITY = না থেকে আপনাকে পরিবর্তন করার জন্য আপনাকে /etc/init.d/tomcat6 দরকার। এটি আমার সমাধান নয়, আমি এটি এখানে পেয়েছি , যেমন আপনি দেখতে পাচ্ছেন, আমি উবুন্টু চালাচ্ছি, আশা করি এটি কাজ করে।


0

আমারও একই সমস্যা ছিল। /Etc/mysql/my.cnf ফাইলটিতে "বাইন্ড-ঠিকানা" বৈশিষ্ট্যটি 0.0.0.0 এ পরিবর্তন করা হয়েছে এবং এটি কার্যকর হয়। মাই সিএনএফ-এ সংশ্লিষ্ট লাইনটি দেখতে এমন দেখাচ্ছে:

বাইন্ড-ঠিকানা = 0.0.0.0

এটি সার্ভারের বাইরের আইপি ঠিকানায় সেট করার আগে, দেখে মনে হয়েছিল এটির মতো:

বাইন্ড-ঠিকানা = 196.152.4.145

আমি মনে করি যখন এটি বাইরের আইপি ঠিকানায় সেট করা হয় এবং লোকালহোস্ট লুপটি নয়, মাইএসকিএল সার্ভারটি কেবলমাত্র কার্ড কার্ডের সাথে সংযুক্ত থাকে এবং স্থানীয় লুপ থেকে সংযোগগুলি শুনতে দেয় না।


0

আপনার স্থানীয় ঠিকানাটি my.cnf ফাইলে ঠিকানা বাঁধতে চেষ্টা করুন

সংযোগ কন = নাল;

    try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://x62.xx8.x4x.x5:3306/mydb", "root", "root");
        try {
            System.out.println(con.getMetaData());
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } catch (ClassNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.