আমার দুটি প্রোগ্রামেও আমার একই সমস্যা ছিল। আমার ত্রুটিটি এটি ছিল:
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.
আমি এই সমস্যাটি সমাধান করতে কিছু দিন ব্যয় করেছি। আমি বিভিন্ন ওয়েব সাইটগুলিতে উল্লিখিত অনেকগুলি পদ্ধতির পরীক্ষা করেছি, তবে সেগুলির কোনওটিই কাজ করে না। অবশেষে আমি আমার কোড পরিবর্তন করেছি এবং খুঁজে পেয়েছি কী সমস্যা ছিল। আমি আপনাকে বিভিন্ন পদ্ধতির সম্পর্কে বলার চেষ্টা করব এবং সেগুলি এখানে সংক্ষিপ্ত করব ।
আমি যখন এই ত্রুটির সমাধান অনুসন্ধান করার জন্য ইন্টারনেটটি খুঁজছিলাম তখন আমি বুঝতে পেরেছিলাম যে অনেকগুলি সমাধান রয়েছে যা কমপক্ষে একজন ব্যক্তির পক্ষে কাজ করেছে, তবে অন্যরা বলে যে এটি তাদের পক্ষে কার্যকর হয় না! কেন এই ত্রুটি অনেক পন্থা আছে? সার্ভারের সাথে সংযোগ করার ক্ষেত্রে সমস্যা দেখা দিলে সাধারণত এই ত্রুটিটি ঘটতে পারে
বলে মনে হয় । সমস্যাটি ভুল কোয়েরি স্ট্রিং বা ডাটাবেসের সাথে অনেক বেশি সংযোগের কারণে।
সুতরাং আমি আপনাকে পরামর্শ দিচ্ছি যে সমস্ত সমাধানগুলি একে একে চেষ্টা করে দেখুন এবং হাল ছাড়বেন না!
আমি ইন্টারনেটে এবং সেগুলির প্রত্যেকটির জন্য যে সমাধানগুলি পেয়েছি তা এখানে রয়েছে, কমপক্ষে এমন ব্যক্তির উপরে আছেন যিনি তার সমস্যার সমাধান করেছেন।
পয়েন্ট: আপনার যে মাইএসকিউএল সেটিংস পরিবর্তন করতে হবে সেই সমাধানগুলির জন্য, আপনি নিম্নলিখিতটি উল্লেখ করতে পারেন:
সমাধানগুলি এখানে:
- "বাইন্ড-ঠিকানা" বৈশিষ্ট্য পরিবর্তন করা
মন্তব্য না করে "বাইন্ড-অ্যাড্রেস" বৈশিষ্ট্য বা এটিকে নিম্নলিখিত আইপিএসের মধ্যে একটিতে পরিবর্তন করুন:
বেঁধে-ঠিকানা = "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
যদিও এই সমাধানগুলির কোনওটিই আমার পক্ষে কাজ করে না, আমি আপনাকে এগুলি চেষ্টা করার পরামর্শ দিই। কারণ কিছু লোক রয়েছে কীভাবে এই পদক্ষেপগুলি অনুসরণ করে তাদের সমস্যার সমাধান হয়েছে।
তবে আমার সমস্যার সমাধান কী? আমার সমস্যাটি হ'ল ডেটাবেজে আমার অনেকগুলি নির্বাচন ছিল। প্রতিবার আমি সংযোগ তৈরি করেছি এবং তারপরে এটি বন্ধ করে দিয়েছি। যদিও আমি প্রতিবার সংযোগটি বন্ধ করে দিয়েছি, তবে সিস্টেমটি অনেক সংযোগের মুখোমুখি হয়েছিল এবং আমাকে সেই ত্রুটি দিয়েছে। আমি যা করেছি তা হ'ল আমি আমার সংযোগ ভেরিয়েবলটিকে পুরো ক্লাসের জন্য সর্বজনীন (বা বেসরকারী) ভেরিয়েবল হিসাবে সংজ্ঞায়িত করেছি এবং এটি কনস্ট্রাক্টরটিতে আরম্ভ করেছি। তারপরে প্রতিবার আমি কেবল সেই সংযোগটি ব্যবহার করেছি। এটি আমার সমস্যা সমাধান করেছে এবং আমার গতি নাটকীয়ভাবে বাড়িয়েছে।
উপসংহার
এই সমস্যা সমাধানের জন্য সহজ এবং অনন্য কোনও উপায় নেই। আমি আপনাকে আপনার নিজের পরিস্থিতি সম্পর্কে চিন্তাভাবনা করার এবং উপরের সমাধানগুলি বেছে নেওয়ার পরামর্শ দিচ্ছি। আপনি যদি প্রোগ্রামটির শুরুতে এই ত্রুটিটি গ্রহণ করেন এবং আপনি কোনওভাবেই ডাটাবেসের সাথে সংযোগ করতে সক্ষম না হন তবে আপনার সংযোগের ক্ষেত্রে আপনার সমস্যা হতে পারে। তবে আপনি যদি এই ত্রুটিটি ডাটাবেসে বেশ কয়েকটি সফল মিথস্ক্রিয়ার পরে নেন তবে সমস্যাটি সংযোগের সংখ্যার সাথে হতে পারে এবং আপনি "ওয়েটটাইমআউটআউট" এবং অন্যান্য মাইএসকিউএল সেটিংস পরিবর্তন করার বিষয়ে ভাবতে পারেন বা কীভাবে সংযোগের সংখ্যা হ্রাস করে তা আপনার কোডটি পুনরায় লিখতে পারেন।