मेरे पास डेबियन व्हीज़ी ( apt-get install mysql-server mysql-client
) पर एक सुंदर मानक MySQL इंस्टॉलेशन है जो मैंने पहले भी कई बार सफलतापूर्वक किया है।
जब मैं माध्यम से जुड़ने की कोशिश करता हूं 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.
मुझे आमतौर पर यह अपवाद मिलता है जब MySQL सर्वर ने एक बेकार कनेक्शन बंद कर दिया है या फिर से चालू किया गया है। हालाँकि, यह अब एप्लिकेशन स्टार्टअप पर होता है जब एप्लिकेशन पहली बार कनेक्ट करने का प्रयास करता है।
काफी मजेदार यह कुछ ही घंटे पहले काम किया था । दुर्भाग्य से मैं सर्वर पर कुछ भी बदलने के लिए याद नहीं कर सकता। :-(
तो ईमानदार होने के लिए, इस तरह के पोस्ट में दो प्रश्न होते हैं: मैं क्यों नहीं कनेक्ट कर सकता हूं 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
EDIT 2
के माध्यम से कनेक्ट करने से telnet
बहुत अधिक जानकारी नहीं मिलती है लेकिन यह दर्शाता है कि कनेक्शन तुरंत बंद हो गया है।
# telnet localhost 3306
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
वैसे, MySQL logfiles लॉगिंग सक्षम होने के साथ भी पूरी तरह से चुप हैं।
localhost
है, लेकिन नेटवर्किंग का उपयोग करता है। जैसा कि कोई स्वाभाविक रूप से उम्मीद करता है ... लेकिन मूल प्रश्न बना हुआ है।