2010-05-30 63 views
5

मैं उबंटू चला रहा हूं और आखिरकार जेएमबीसी का उपयोग कर टॉमकैट को अपने MySQL डेटाबेस से कनेक्ट करने का प्रयास कर रहा हूं।जेडीबीसी के साथ MySQL से कनेक्ट नहीं हो सकता - कनेक्शन टाइमआउट - उबंटू 9.04

यह पहले पर काम किया है लेकिन रीबूट के बाद उदाहरण अब कनेक्ट करने में विफल रहता है। JDBC:

  • दोनों बिलाव 6 और MySQL 5.0.75 एक ही मशीन
  • कनेक्शन स्ट्रिंग पर हैं mysql: /// स्थानीय होस्ट: 3306
  • मैं mysql का उपयोग कर कमांड लाइन पर MySQL से कनेक्ट कर सकते आदेश
  • my.cnf फ़ाइल सुंदर मानक (अनुरोध पर उपलब्ध है) के लिए बाध्य किया गया है पता है: 127.0.0.1
  • मैं netstat MySQL कह के बावजूद MySQL बंदरगाह नहीं टेलनेट
  • सुन रहा है मैं अग्रेषित करने के लिए एक iptables नियम है 80 -> 8080 और कोई फ़ायरवॉल मुझे पता है।

मैं इस पर बहुत नया हूं और मुझे यकीन नहीं है कि परीक्षण करने के लिए और क्या है। मुझे नहीं पता कि मुझे आदि/इंटरफेस में देखना चाहिए या नहीं और यदि मैंने ऐसा किया तो मैंने क्या किया। यह अजीब है क्योंकि यह काम करता था लेकिन रीबूट के बाद यह नीचे है इसलिए मैंने कुछ बदलना होगा .... :)।

मुझे लगता है कि एक टाइमआउट इंगित करता है कि सर्वर प्रतिक्रिया नहीं दे रहा है और मुझे लगता है कि यह अनुरोध वास्तव में नहीं हो रहा है। मैंने apt-get और टोमकैट मैन्युअल रूप से MySQL स्थापित किया।

mysqld प्रक्रियाओं

[email protected]:/var/log/mysql# ps -ef | grep mysqld 
root  21753  1 0 May27 ?  00:00:00 /bin/sh /usr/bin/mysqld_safe 
mysql 21792 21753 0 May27 ?  00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock 
root  21793 21753 0 May27 ?  00:00:00 logger -p daemon.err -t mysqld_safe -i -t mysqld 
root  21888 13676 0 11:23 pts/1 00:00:00 grep mysqld 

Netstat

[email protected]:/var/log/mysql# netstat -lnp | grep mysql 
tcp  0  0 0.0.0.0:3306   0.0.0.0:*    LISTEN  21792/mysqld 
unix 2  [ ACC ]  STREAM  LISTENING  1926205077 21792/mysqld  /var/run/mysqld/mysqld.sock 

खिलौना कनेक्शन कक्षा

[email protected]:~# cat TestConnect/TestConnection.java 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

public class TestConnection { 

    public static void main(String args[]) throws Exception { 
    Connection con = null; 

    try { 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     System.out.println("Got driver"); 
     con = DriverManager.getConnection(
       "jdbc:mysql:///localhost:3306", 
       "uname", "pass"); 
     System.out.println("Got connection"); 

     if(!con.isClosed()) 
     System.out.println("Successfully connected to " + 
      "MySQL server using TCP/IP..."); 

    } finally { 
     if(con != null) 
      con.close(); 
    } 
    } 
} 

खिलौना कनेक्शन कक्षा आउटपुट

नोट: यह वही त्रुटि है जो मुझे टॉमकैट से मिलती है।

[email protected]:~/TestConnect# java -cp mysql-connector-java-5.1.12-bin.jar:. TestConnection 
Got driver 
       Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet sent successfully to the server was 1 milliseconds ago. The driver has not received any packets from the server. 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) 
     at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)    
     at TestConnection.main(TestConnection.java:14) 
Caused by: 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. 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) 
     at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122) 
     at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344) 
     at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181) 
     ... 12 more 
Caused by: java.net.ConnectException: Connection timed out 
     at java.net.PlainSocketImpl.socketConnect(Native Method) 
     ... 13 more 

टेलनेट आउटपुट

[email protected]:~/TestConnect# telnet localhost 3306 
Trying 127.0.0.1... 
telnet: Unable to connect to remote host: Connection timed out 

उत्तर

2

Netstat पता चलता है कि MySQL वास्तव में सभी स्थानीय पते पर पोर्ट 3306 पर सुन रहा है। चूंकि टेलनेट 127.0.0.1 से कनेक्ट नहीं हो सकता है एक फ़ायरवॉल है जो आपके लिए बंद हो जाता है - इसे sudo ufw default allow को प्रभावी रूप से अक्षम करने के लिए, या sudo ufw allow 3306 चलाने का प्रयास करें और देखें कि क्या कोई बदलाव करता है या नहीं।

+0

यह मुझे उस उत्तर में ले जाता है जो कि लो इंटरफ़ेस नीचे था। * शर्म में सिर लटका *। एक त्वरित 'ifconfig lo up' इसे सॉर्ट किया गया। – gav

0

कनेक्शन स्ट्रिंग द्वारा

jdbc:mysql://localhost:3306 
बजाय

jdbc:mysql:///localhost:3306 
इसके अलावा यूनिक्स/लिनक्स पर

, होना चाहिए डिफ़ॉल्ट क्लाइंट/सर्वर संचार यूनिक्स सॉकेट फ़ाइल के माध्यम से किया जाता है और टीसीपी/आईपी के माध्यम से नहीं किया जाता है। इसलिए आप अपनी स्थानीय मशीन पर पोर्ट 3306 पर टेलनेट करने में सक्षम नहीं हैं।

+0

मैं कनेक्शन स्ट्रिंग और फिर भी प्रयास विफल ammended। क्या टोमकैट/जावा का उपयोग कर सॉकेट के माध्यम से कनेक्ट करना संभव है? हो सकता है कि मैं इस पोर्ट और टोमकैट के माध्यम से सॉकेट का उपयोग करने के लिए कभी भी कनेक्ट नहीं कर पा रहा हूं? – gav

+0

ऐसा लगता है कि MySQL कनेक्टर/जे यूनिक्स सॉकेट के माध्यम से कनेक्शन का समर्थन नहीं करता है - यह केवल टीसीपी/आईपी या नामित पाइप के माध्यम से कनेक्शन का समर्थन करता है। टीसीपी/आईपी के माध्यम से कनेक्शन स्वीकार करने के लिए अपने MySQL सर्वर को कॉन्फ़िगर करना एक आसान विकल्प होगा। –

0

क्या आप हमेशा getConnection विधि के लिए एक ही हस्ताक्षर का उपयोग कर रहे थे, या क्या यह काम करने से पहले आपके द्वारा बदली गई चीज़ों में से एक है?('///' स्ट्रिंग सुझाव में यह एक हाल ही में किया गया था।)

इस नए कोड है, तो आपको निम्न कनेक्शन स्ट्रिंग की कोशिश कर सकते:

स्ट्रिंग dbUrl = "JDBC: mysql: // लोकलहोस्ट: 3306/[डीबी]? उपयोगकर्ता = [उपयोगकर्ता] & पासवर्ड = [पासवर्ड] "; कनेक्शन conn = DriverManager.getConnection (dbUrl);

यह mysql.com प्रलेखन पृष्ठ पर उदाहरण स्वरूप है:

http://dev.mysql.com/doc/refman/5.0/es/connector-j-usagenotes-basic.html

1

आपकी/etc/hosts फ़ाइल कैसी दिखती है? क्या आपके पास निम्न की तरह एक प्रविष्टि है?

127.0.0.1 localhost 

आप टेलनेट करने की कोशिश कर सकते हैं:

telnet 127.0.0.1 3306 or telnet 127.0.0.1:3306 

या JDBC से कनेक्ट:

jdbc:mysql://127.0.0.1:3306 
संबंधित मुद्दे