tomcat开机不能访问mysql,Tomcat6无法连接到MySql(驱动程序尚未从服务器接收任何数据包)...

i'm running an Apache Tomcat 6.0.20 / MySQL 5.1.37-lubuntu / sun-java6-jdk /sun-java6-jre / sun-java6-bin on my local machine using Ubuntu 9.10 as OS.

I'm trying to get a simple DB-query example running for 2 days now, but i still get this Exception:

org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (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.)"

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (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.)"

org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)

org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)

org.apache.jsp.index_jsp._jspService(index_jsp.java:104)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (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.)"

org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.getConnection(QueryTagSupport.java:285)

org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.doStartTag(QueryTagSupport.java:168)

org.apache.jsp.index_jsp._jspx_meth_sql_005fquery_005f0(index_jsp.java:274)

org.apache.jsp.index_jsp._jspx_meth_c_005fotherwise_005f0(index_jsp.java:216)

org.apache.jsp.index_jsp._jspx_meth_c_005fchoose_005f0(index_jsp.java:130)

org.apache.jsp.index_jsp._jspService(index_jsp.java:93)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

my web.xml looks like this :

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

version="2.5">

DB Connection

jdbc/testDB

javax.sql.DataSource

Container

the context.xml looks like this :

maxActive="5" maxIdle="5" maxWait="10000"

username="user" password="password" driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/some"/>

and the jsp file looks like this:

DroneLootTool

select name, othername

from mytable

Results

Name ${row.name}

MoreName ${row.othername}

read lots of forum entries / tried lots of different settings (always changed back to original settings when it didnt' work)

set TOMCAT6_SECURITY=no in /etc/default/tomcat6 because TOMCAT6_SECURITY=yes was causing trouble too

the skip-networking flag is not set for the DB (BIND 127.0.0.1 is set)

firewall is swiched off (sudo ufw disable)

MySQL works (tested several times with user used in this skript)

telnet localhost 3306 says

Trying ::1...

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

Connection closed by foreign host.

The TestConnection.java produced the following output:

me@my-laptop:~/Desktop$ java -classpath '/usr/share/java/mysql.jar:./' TestConnection com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/testDB myuser mypassword

com.mysql.jdbc.CommunicationsException: Communications link failure

Last packet sent to the server was 0 ms ago.

at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1070)

at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2103)

at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:718)

at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:298)

at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)

at java.sql.DriverManager.getConnection(DriverManager.java:582)

at java.sql.DriverManager.getConnection(DriverManager.java:185)

at TestConnection.checkConnection(TestConnection.java:40)

at TestConnection.main(TestConnection.java:21)

Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure

Last packet sent to the server was 0 ms ago.

at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1070)

at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:666)

at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1069)

at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031)

... 7 more

Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2431)

at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:590)

... 9 more

Connection failed.

i don't know if there is a difference between the way the java driver connects to the DB and the Perl DBI module does, but this PERL skript works

#!/usr/bin/perl -w

use CGI;

use DBI;

use strict;

print CGI::header();

my $dbh = DBI->connect("dbi:mysql:some:localhost", "user", "password");

my $sSql = "SELECT * from mytable";

my $ppl = $dbh->selectall_arrayref( $sSql );

foreach my $pl (@$ppl)

{

my @array = @$pl;

print @array;

}

$dbh->disconnect;

enabled --log-warnings on the mysql, but i didn't get any new warnings.

When i was searching the logs for warnings i found this messages when i restart the tomcat, don't know if it helps to find the problem :

Feb 2 19:50:37 tobias-laptop jsvc.exec[3129]: 02.02.2010 19:50:37 org.apache.catalina.startup.HostConfig checkResources#012INFO: Undeploying context [/myapp]

Feb 2 19:50:37 tobias-laptop jsvc.exec[3129]: 02.02.2010 19:50:37 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads#012SCHWERWIEGEND: A web application appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.

Feb 2 19:50:37 tobias-laptop jsvc.exec[3129]: 02.02.2010 19:50:37 org.apache.catalina.startup.HostConfig deployDescriptor#012INFO: Deploying configuration descriptor myapp.xml

解决方案

I had the same issue.

It turns out I messed up the server by running three mysqld instances, so kill the unwanted resolved my issue:

me@ubuntu:~$ ps aux | grep mysql

mysql 8149 0.1 0.4 280484 26008 ? Ssl 13:24 0:00 /usr/sbin/mysqld

me 8256 0.0 0.0 4392 836 pts/3 S+ 13:24 0:00 grep --color=auto mysql

root 26569 0.0 0.0 5952 1856 ? S 10:44 0:00 sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking

mysql 26570 0.1 0.6 323528 41936 ? Sl 10:44 0:15 /usr/sbin/mysqld --skip-grant-tables --skip-networking

me@ubuntu:~$ sudo kill 26570

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值