论坛首页 Java企业应用论坛

RESIN/TOMCAT和MYSQL的连接解决方法

浏览 12198 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2003-10-17  
cloud/2003.10.15
mail:flashc@21cn.com

如果你不想看太多废话直接看下面3句话就ok了
解决方法的主要手段:
1.mysql的授权用户权限必须@%而不是@localhost
2.jsp使用jdbc驱动连接数据库的连接字符实际上应该算远程访问
3.切记:@%代表在远程的权限,@localhost实际上只有在本机的权限

也许我太笨了,折磨了我一个多月吧,这个问题,一直没法连接到数据库上,头都大了因我安装mysql后习惯删除user表里的3个多余的帐号,以加强安全,所以这个问题一直没解决掉(但我想不删也好象一样有问题吧?毕竟那几个帐号都不是@%的),总是找不到原因,在CU的斑竹的提示下(虽然没给我实际解决的方法,但我还是要谢谢他们),后来根据出错信息查了一下国外的BBS,找到了一个类似的回答同样的错误,不过一个老外提示说把连接字符串里的localhost换成实际的域名或者IP我试了一下,没效,不过我突然想了下,又加了一个帐号@%的试验,成功了!心情很爽,再也不用郁闷了,还有,说一下,mysql这个数据库只有root帐号能有管理的特权,其他帐号是没权限动它的。

希望我的心得能给别人带来些帮助!

下面是测试用的jsp脚本,测试前请确保你的test数据库里面有个test表,随便填
两个字段和输入几行数据。
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.mysql.jdbc.Driver").newInstance();
String url ="jdbc:mysql://localhost/test?user=test&password=test&useUnicode=true&characterEncoding=8859_1" ;
//假设test是你的数据库
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
//从test表读数据
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
   发表时间:2003-10-17  
呵呵,这个问题确实难倒了很多人,记得原来在jdon上有一个叫做什么sinon_fang的自称自己用了两年的mysql,也是连个这个基本的问题都不懂,还大骂mysql不正常。


我补充几句:


1、空用户连接必须删除,否则会带来很多麻烦

2、在Unix上,localhost连接不使用TCP协议,使用的是Unix Socket协议,在这种情况下,你就算关闭3306端口,也不会影响程序访问数据库。例如你在PHP中访问数据库就是这种情况。但是Unix Socket连接吞吐量没有TCP连接大,建议用TCP连接。

例如本论坛原来就是使用Unix Socket,现在已经被我改为TCP了。

3、JDBC连接是基于TCP协议的,就算你写localhost,也肯定使用TCP协议,这需要你打开相应的访问权限。PHP只所以可以使用Unix Socket,是因为PHP是调用底层的MySQL C API访问数据库,不必通过网络端口调用。

4、安装MySQL之后第一件事情:

#mysql

connect mysql;

delete from user where user='';

grant all mysql.* to root@"localhost" identified by "password" with grant option;

grant all mysql.* to root@"%" identified by "password" with grant option;

quit

这样就不必担心连接问题了。以后添加新的用户,照此办理。

另外在Linux上推荐使用iptables封掉3306端口,这样安全了,只允许本机程序访问,不允许外部访问。
0 请登录后投票
   发表时间:2003-10-17  
robbin 写道
呵呵,这个问题确实难倒了很多人,记得原来在jdon上有一个叫做什么sinon_fang的自称自己用了两年的mysql,也是连个这个基本的问题都不懂,还大骂mysql不正常。

呵呵,我们这里就是要反对一切形式的神秘主义和伪专家。
0 请登录后投票
   发表时间:2003-10-17  
我安装了MySQL后,用winmysqladmin新建一个账号,然后把其它都删掉。这样就很安全,也算是一个简便方法
0 请登录后投票
   发表时间:2004-10-25  
robbin 写道
但是Unix Socket连接吞吐量没有TCP连接大,建议用TCP连接。

例如本论坛原来就是使用Unix Socket,现在已经被我改为TCP了。



我记得Domain Socket的效率是远远高于TCP的啊?而且从概念上也很容易理解,Socket省略了校验、失序、组合这些颇为耗时的过程,
在效率上要高于TCP不少,即使本机的TCP可能会利用回环接口提高效率,但它还是比不上本机的Socket。即便考虑到这些方式的实现在
不同的系统上效率的差别,总体上Socket还是优于TCP的,这些应该是不争的事实。
不知“Unix Socket连接吞吐量没有TCP”的说法从何得出,是否有出处?或者是否经过验证?

我这里一直用的是Socket,没感觉到什么瓶颈,不过我们没有跟TCP做过对比。基于上学时和书本中的经验,一直认为Socket优于TCP。
另外既然MySQL同时提供了Socket和TCP两种实现方式,在本机上又以Socket为默认实现,肯定是有它的道理在的。Socket一直被本机
CS应用广泛使用,例如X之类,它应该也是经得起考验的。
也许自己是孤陋寡闻,还请指点。

局限到某个系统也许是有意义的,我这里用的是Linux。
0 请登录后投票
   发表时间:2004-10-25  
就拿这台服务器来说吧,开始的时候,用的是Unix Socket,当时是Linux Kernel2.4,只要数据库连接数量一多,就会出现连接不上的错误,UnixSocket Error,后来改成了TCP/IP,立刻就好了。

现在服务器升级到了Linux Kernel2.6,我没有再改回去过测试,不过我的印象当中始终对Unix Socket大连接量不放心,我说得吞吐量就是指并发大量数据库连接下的稳定性。
0 请登录后投票
   发表时间:2004-10-26  
没看明白,反正我能用localhost就用localhost

允许远程访问是很危险地,特别是允许任意IP访问
0 请登录后投票
   发表时间:2004-10-26  
明白了。我那里的情况是数据库的连接数一直不是太多,但每个连接的数据量巨大,这时
用UNIX Domain Socket显然没有问题,我这里已经得到验证,并且由于Socket的效率
明显高于TCP,所以这时Domain是首选。
你这里的情况是连接数很多,用UNIX Socket会出错,所以TCP变成了首选。

对Linux IPC和网络栈不太熟悉,不清楚为什么Socket会在大连接数时报错,猜想是不
是Linux里Domain Socket设计的缺陷,或者默认可用的Sockt数太少。

Any way,这些都是有用的经验。

对了,我这里也是Linux 2.4。
0 请登录后投票
   发表时间:2004-10-26  
我觉得应该是Linux 默认允许的Unix Socket数量上可能有限制,当然这也是我的猜想而已。我也没有找到任何地方有提到Unix Socket连接上有什么问题的文档,只是自己的实际经验。

另外允许TCP/IP并不会不安全,你可以只grant 127.0.0.1的访问权限,那么也只有本机可以访问,任何其他机器都无法访问。
0 请登录后投票
   发表时间:2005-06-13  
MySQL 4.x版本的密码是新的长密码,使用grant all mysql.* to root@"localhost" identified by "password" with grant option; 建立的密码用JDBC2.0连接可能会出问题,如果发现连不上,建议修改密码:UPDATE user SET password=OLD_PASSWORD("your password") WHERE ...
你会发现修改后的密码加密串比原密码短了,呵呵,用PHP连接出问题也可以试试修改成OLD_PASSWORD,对于MySQL 4.x以前的版本就不会出现这种问题。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics