2012-02-15 172 views
2

我的Ubuntu 11.10桌面上有一个本地mysql服务器。主机名= localhost; username = root;密码= root;数据库名称= CBS。我真的很困惑,因为当我使用terminalmysql administratormysql query browser访问mysql时,我使用上面提到的那些身份验证,一切都正常。我的问题是,当我在我的Java应用程序配置我jdbc.properties我得到这个错误:JDBC休眠 - Mysql连接错误

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [28000]; error code [1045]; Access denied for user 'root '@'localhost' (using password: YES); nested exception is java.sql.SQLException: Access denied for user 'root '@'localhost' (using password: YES)

我的配置文件,jdbc.properties:

jdbc.driverClassName=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://localhost:3306/CBS 
jdbc.username=root 
jdbc.password=root 

顺便说一句,我之所以将使用本地服务器,因为我们的主服务器关闭,所以我必须使用我的本地mysql继续我的项目。请帮助我...在此先感谢。

+1

使用mysql adminstrator(或其他工具)时,您的主机名是什么?正如下面提到的duffymo,您可能会遇到与该用户连接到本地主机的授权问题。我没有在消息的第一部分看到有关主机名的任何提及。 – jmq 2012-02-15 23:57:55

+1

你使用root creds来运行你的“java app”吗?当您的应用程序运行时 - 使用“ps -ef | grep ”查看它并查看哪个用户正在运行它 - 如果它不是“root”,那么您的答案就在那里。 – alfasin 2012-02-15 23:59:28

+0

@jmquigley localhost – NinjaBoy 2012-02-16 00:19:04

回答

2

您可能需要GRANT权限才能访问数据库。

看看MySQL的文档的东西,看起来像这样:

create database pmt; 
create user pmt identified by 'pmt'; 
grant all on pmt.* to 'pmt'@'%'; 

“PMT”就在上面的例子。我恰巧使数据库的名称,用户名和密码都一样。我不建议这是最佳做法。这只是我为一些地方发展做的事情。

我个人不喜欢GRANT root访问任何应用程序。即使在玩具应用程序中,我也不会使用root用户名和密码。创建新用户和授予适当的权限不需要太多努力。

+0

我该怎么做?请给我看。我对这件事很感兴趣。 – NinjaBoy 2012-02-15 23:52:21

+0

执行这些命令后,我必须重新启动服务器吗? – NinjaBoy 2012-02-15 23:59:06

+0

重启mysql?没有。 – duffymo 2012-02-15 23:59:32

5

很可能你的框架以127.0.0.1的身份登录到本地数据库。如果您尚未定义适当的域范围凭证,将在MySQL中创建登录问题。尝试使用此方法验证:

mysql -uroot -proot 
SELECT * from mysql.user WHERE user = 'root'; 

如果没有“root'@'127.0.0.1”然后发现问题并予以纠正,做两两件事之一:

  1. 定义域'127.0.0.1'的作用域凭证。
  2. 为'root'定义通配域范围凭证,因此您可以使用来自多个位置的凭证以登录到您的MySQL。

这里的第二个示例:

mysql -uroot -proot 

CREATE USER 'root'@'%' IDENTIFIED BY 'root'; 
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; 
FLUSH PRIVILEGES; 

在一个侧面说明,我肯定会推荐使用一些更有创意的用户ID和密码。特别是如果您的服务器启用了TCP套接字。

+0

当我运行命令SELECT * from用户WHERE user ='root';我将使用什么数据库来查看我是否拥有'root'@'127.0.0.1'?我新来这个。 – NinjaBoy 2012-02-16 00:13:56

+0

其实,命令是'select * from mysql.user where user ='root';'。我更新了我的答案。 – Perception 2012-02-16 00:17:22

+0

我看到很多像“+”和“ - ”这样的随机字符。但是我看到了这一行:| localhost | root | * 81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y | Y.这是否意味着我有根? – NinjaBoy 2012-02-16 00:33:35