【发布时间】:2012-02-03 18:36:11
【问题描述】:
- 我的本地计算机正在运行 Ubuntu 11.10。我使用 Eclipse Indigo 作为我的 IDE。
- 我的服务器是在 Amazon EC2 上运行的 BitNami LampStack (Ubuntu 10)。
- 我在 .Net 和 Java 方面都比较有经验,但是 JDBC、MySQL 管理、Linux 和 EC2 的初学者。
我已经成功打开了3306端口,MySQL Workbench可以正常连接。用户 'root'@'%' 拥有所有权限,并且没有默认数据库。
在解决了找不到合适的驱动程序的问题后,我终于将 mysql-connector-java-5.0.8-bin.jar 直接放在我的 Java 项目中。我意识到这可能不是最理想的,但它似乎有效。我做到了(经过大量谷歌搜索),因为我不知道如何在 Ubuntu 上正确安装它,并且担心通过 ssh 到 EC2 会更难,所以我认为它可以编译到项目中。一个链接将不胜感激,因为它也会很好地解决这个问题。
以下是引发异常的代码。这是在 main 的顶部;什么都不先执行。
我已经尝试过使用和不使用 Class.forName(...) 并且还使用 java.util.Properties 作为凭据。相同的凭据在同一台机器上的 MySQL Workbench 中工作,我已经复制+粘贴了几次以确保没有拼写错误。
为了安全起见,我更改了密码和地址,但保留了格式。明确地说,这里的密码是“Abcdef1234#”。据我所知,# 可能是罪魁祸首。
Class.forName("com.mysql.jdbc.Driver");
String CONNECTION_STRING = "jdbc:mysql://ec2-87-212-16-34.compute-1.amazonaws.com?user=root&password=Abcdef1234#";
Connection cn = DriverManager.getConnection(CONNECTION_STRING);
然后抛出:
Exception in thread "main" java.sql.SQLException: Access denied for user 'root'@'ppp-72-135-32-239.dsl.hgyuct.swbell.net' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:885)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3421)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1247)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2775)
at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:620)
at java.sql.DriverManager.getConnection(DriverManager.java:222)
at Program.main(Program.java:5)
如果我应该提供更多信息,请告诉我。
【问题讨论】:
-
这是您真实的服务器详细信息吗?如果是这样,请在这篇文章中用假值替换那些。 (特殊字符除外)
-
感谢您的想法。是的,我已经更改了所有的 IP 地址和密码。
-
注意:我刚刚发现 MySQL Workbench 的管理数据导出功能在我的本地计算机上不起作用,但是,当我从我的端口 7777 构建一个 ssh 中继器到 EC2 端口 3306 然后告诉MySQL 管理员从我的本地机器指向 localhost:7777。
标签: mysql jdbc amazon-ec2