মাইএসকিউএল সংযোগ লোকালহোস্টের সাথে কাজ করে তবে 127.0.0.1 এর সাথে নয়


9

আমি ডেবিয়ান হুইজি ( apt-get install mysql-server mysql-client) -এ একটি সুন্দর স্ট্যান্ডার্ড মাইএসকিউএল ইনস্টলেশন করেছি যা আমি এর আগে অনেকবার সফলভাবে করেছি।

যখন আমি এর মাধ্যমে সংযোগ দেওয়ার চেষ্টা করি তখন localhostসমস্ত কিছুই কাজ করে। তবে এর মাধ্যমে সংযোগ করা 127.0.0.1একটি ত্রুটি বার্তা দেয়:

$ mysql -h localhost -P 3306 -u xxx -p
-- works

$ mysql -h 127.0.0.1 -P 3306 -u xxx -p
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

আমি যখন জাভা অ্যাপ্লিকেশন থেকে সংযোগ দেওয়ার চেষ্টা করি তখন অনুরূপ ত্রুটিগুলি পাই, যদিও আমি localhostহোস্টনাম হিসাবে ব্যবহার করছি :

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.
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

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

মজার যথেষ্ট এই করেনি মাত্র কয়েক ঘণ্টা আগে হবে। দুর্ভাগ্যক্রমে আমি সার্ভারে কোনও কিছু বদলেছে বলে মনে করতে পারি না। :-(

সুতরাং সত্যি কথা বলতে কি এই পোস্টে দুটি প্রশ্ন রয়েছে: কেন আমি এর মাধ্যমে সংযোগ দিতে পারি না 127.0.0.1? এবং কেন আমার অ্যাপ্লিকেশনগুলি সিএলআইয়ের মাধ্যমে localhostযদিও আমি সংযোগ করতে পারি না?

# mysqld -V
mysqld  Ver 5.5.37-0+wheezy1-log for debian-linux-gnu on x86_64 ((Debian))

# mysql -V
mysql  Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.2

# grep bind /etc/mysql/my.cnf
bind-address = 127.0.0.1

# grep socket /etc/mysql/my.cnf
socket = /var/run/mysqld/mysqld.sock

# ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.022 ms

# grep localhost /etc/hosts
127.0.0.1 localhost
::1     ip6-localhost ip6-loopback

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

# netstat -ln | grep 3306
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN

tomcat # grep mysql conf/server.xml
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/dbname"

সম্পাদনা

আমি সার্ভারকে 0.0.0.0এবং সাথে কোনওভাবেই বাঁধার চেষ্টা করেছি ::

সার্ভারটি IPv6 সমর্থন করে এবং সে অনুযায়ী কনফিগার করা হয়েছে:

# host localhost
localhost has address 127.0.0.1
localhost has IPv6 address ::1

উপরে বর্ণিত একই সমস্যাটি যখন আমি সংযোগ দেওয়ার চেষ্টা করি তখনই ঘটে ::1

# ping6 ::1
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.020 ms

# ping6 localhost
64 bytes from ip6-localhost: icmp_seq=1 ttl=64 time=0.018 ms

সম্পাদনা 2

মাধ্যমে সংযোগ করা telnetঅনেক তথ্য দেয় না তবে দেখায় যে সংযোগটি অবিলম্বে বন্ধ হয়ে গেছে।

# telnet localhost 3306
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

যাইহোক, মাইএসকিউএল লগফাইলগুলি লগিং সক্ষম থাকা সত্ত্বেও সম্পূর্ণ নীরব।


আমার জাভা অ্যাপ্লিকেশন থেকে আমি ত্রুটিগুলি পাওয়ার কারণটি হ'ল জেডিবিসি ড্রাইভার সকেটে সমাধান করে নাlocalhost তবে নেটওয়ার্কিং ব্যবহার করে। যেমনটি স্বাভাবিকভাবেই প্রত্যাশা করা যায় ... তবে মূল প্রশ্নটি রয়ে গেছে।
ফিলিপ জর্দাস

উত্তর:


1

অপরাধী মনে হয়েছিল hosts.denyএবং এটির hosts.allowডিফল্টরূপে একটি ফাইল মোড রয়েছে 0x600। সংযোগের অনুমতি দেওয়ার বিষয়ে নির্ধারণ করতে মাইএসকিউএল তাদের পড়তে পারেনি। আমি ফাইলের মোডগুলিতে পরিবর্তন করেছি 0x644এবং এখন সবকিছু সুচারুভাবে চলছে। আমি এখনও ভাবছি কেন মাইএসকিউএল কোনও ত্রুটি লগ করল না ...


0

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


আপনি যে উত্তর পোস্ট করেছেন সে উত্তরটি আমার কাছে একেবারে বিপরীত answers এবং আমি উভয় নেটওয়ার্কিং এবং ফাইল সকেট সক্রিয় আছে।
ফিলিপ জর্দাস

হ্যাঁ তুমিই ঠিক. দুঃখিত আপনার প্রশ্ন ভুল পড়ে।
নেবু

0

আপনি আইপিভি 6 সক্ষম করে থাকতে পারেন, এটির সম্ভাব্য লোকালহোস্ট আইপিভি 6 লোকালহোস্টের সাথে সমাধান করে, এটি আপনার মাইএসকিএল কনফিগারেশনে সংজ্ঞায়িত হয়নি।

কমান্ড লাইনে 'হোস্ট লোকালহোস্ট' :: 1 এর পাশাপাশি 127.0.0.1 এ ফিরে এসে আপনি এটি পরীক্ষা করে দেখতে পারেন। যদি তা হয় তবে আপনি আইপিভি 6 :: 1 ঠিকানার পাশাপাশি 127.0.0.1 এ শোনার জন্য মাইএসকিউএল :: 1 ম্যাপিং মুছে ফেলতে বা পুনরায় কনফিগার করতে পারেন


প্রকৃতপক্ষে উভয় সমাধান করা স্থানীয় হোস্টের 127.0.0.1এবং ::1। আমি মাইএসকিউএলকে বাঁধার চেষ্টা করেছি ::1, কোনও পরিবর্তন নেই। এমনকি আমি মাইএসকিউএল 0.0.0.0এবং এর সাথে ::কোনও পার্থক্য বাঁধার চেষ্টা করেছি ।
ফিলিপ জর্দাস

0

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

skip-name-resolve       = on

আপনি যখন এটি করেন, মাইএসকিউএল লো আর আরডিএনএস 127.0.0.1-> সমাধান করার জন্য ব্যবহার করে localhostএবং যেহেতু আমার সমস্ত GRANTগুলি এর জন্য user@localhost, ব্যবহারকারীকে হোস্ট থেকে সংযোগ করার অনুমতি নেই 127.0.0.1

এই বিশেষ সমস্যার জন্য দুটি সমাধান বিদ্যমান:

  1. অক্ষম skip-name-resolve
  2. পাশাপাশি যুক্ত GRANTকরতে আপনার গুলি প্রসারিত করুন127.0.0.1localhost
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.