JAVA应用程序(Tomcat和Jboss)与mysql数据库连接异常(localhost与127.0.0.1)
一.环境描述
(1)系统版本: CentOS release 6.5 (Final)
(2)内核版本: 2.6.32-431.el6.x86_64
(4)jdk版本: java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM(build 23.5-b02, mixed mode)
(5)jboss版本: jboss-as-7.1.1.Final
(6)数据库版本: 5.1.71
二.故障现象描述
(1)JBOSS通过jdbc.properties与数据库连接
jdbc.properties的相关内容:
jdbc.url=jdbc:mysql://localhost/abf?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
简单来说,就是jboss通过连接本机(localhost)上的mysql来访问mysql数据库
用户名为root,密码也是root
(2)当JBOSS执行启动命令后
通过浏览器访问WEB应用程序总是失败
(3)mysql数据库的user数据表内容如下:
mysql>select host,user,password from mysql.user;
+------------------+------+--------------------------------------------------------------------------------+
| host | user | password |
+------------------+------+--------------------------------------------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B|
| master.mysql.com | root | |
| 127.0.0.1 | root | |
| localhost | | |
| master.mysql.com | | |
+------------------+------+----------------------------------------------------------------------------------+
注意:这里localhost ,root,的密码是123456
三.问题分析
(1)JBOSS能过配置文件jdbc.properties,使用localhost, root,123456这3个参数连接mysql
(2)mysql中user表里包括了localhost,root, 123456这个账户
按理说, JBOSS访问mysql数据库应该没有问题,但是有3个地方要注意
a.通常情况下,无论windows还是linux系统,名词localhost等价于127.0.0.1 ,但在本文所描述的场景中他们并不等价
b.在mysql的概念里 root@localhost账号与root@127.0.0.1是两个完全不同的账号
c.尽管在jdbc.properties中设置使用localhost来访问本机mysql,但JBOSS并不使用root@localhost来访问mysql数据库,而是用root@127.0.0.1来访问本机mysql
四.解决方案
1.在mysql中为127.0.0.1主机增加账号
mysql -uroot -proot
mysql>grant all on *.* to 'root'@'127.0.0.1' identified by '123456';
mysql>flush privileges;
注1:这里只是个示例,应该为root@127.0.0.1分配何种权限,根据实际需要操作
注2:如果想清除账号: root'@'127.0.0.1的密码,只需要执行下面的步骤:
mysql>grant all on *.* to 'root'@'127.0.0.1' identified by '';
mysql>flush privileges;
2.验证操作成功
mysql>select host,user,password from mysql.user;
+------------------+------+-------------------------------------------+
|host | user | password |
+------------------+------+-------------------------------------------+
|localhost | root |*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
|master.mysql.com | root | |
|127.0.0.1 | root |*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
|localhost | | |
|master.mysql.com | | |
+------------------+------+-------------------------------------------+
已经成功为127.0.0.1设置了密码: 123456
3.此时再启动JBOSS则不会报错,应用可以正常访问
注: 本文描述JBOSS与 mysql连接异常,同样的问题在Tomcat环境中也在在,处理方式相同