Ben daha apt-get install mysql-server mysql-client
önce birçok kez başarılı bir şekilde yapmış Debian Wheezy ( ) oldukça standart bir MySQL kurulum var.
Bağlanmaya çalıştığımda localhost
her şey çalışıyor. Ancak üzerinden bağlanmak 127.0.0.1
bir hata mesajı verir:
$ 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
Bir Java uygulamasından bağlanmaya çalıştığımda localhost
hostname olarak kullanmama rağmen benzer hatalar alıyorum :
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 sunucusu boşta olan bir bağlantıyı kapattığında veya yeniden başlatıldığında genellikle bu istisnayı alıyorum. Ancak, bu uygulama ilk kez bağlanmaya çalıştığında uygulama başlangıcında olur.
Komik yeterince bu yaptığımız sadece birkaç saat önce işi. Ne yazık ki sunucuda bir şey değiştiğini hatırlayamıyorum. :-(
Dürüst olmak gerekirse, bu yazı türünde iki soru var: Neden bağlantı kuramıyorum 127.0.0.1
? Ve localhost
CLI aracılığıyla yapabilsem de uygulamalarım neden bağlanamıyor ?
# 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"
DÜZENLE
Sunucuyu bağlamayı denedim 0.0.0.0
ve ::
boşuna.
Sunucu IPv6'yı destekler ve buna göre yapılandırılır:
# host localhost
localhost has address 127.0.0.1
localhost has IPv6 address ::1
Bağlanmaya çalıştığımda yukarıda açıklananla aynı sorun ortaya çıkıyor ::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
DÜZENLEME 2
Üzerinden bağlanmak telnet
çok fazla bilgi vermez, ancak bağlantının hemen kapatıldığını gösterir.
# telnet localhost 3306
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
Bu arada, MySQL günlük dosyaları günlük etkinleştirilmiş olsa bile tamamen sessizdir.
localhost
soket ancak kullanımları ağ için. Doğal olarak beklendiği gibi ... Ama asıl soru var.