【发布时间】:2011-01-20 01:38:03
【问题描述】:
我正在尝试使用 Eclipse IDE 创建 JSF 应用程序。我正在使用远程 mySQL 服务器作为我的数据库。如何连接到此远程数据库以创建表并访问它们?
【问题讨论】:
我正在尝试使用 Eclipse IDE 创建 JSF 应用程序。我正在使用远程 mySQL 服务器作为我的数据库。如何连接到此远程数据库以创建表并访问它们?
【问题讨论】:
只需在数据库连接字符串中提供远程计算机的 IP / 主机名,而不是 localhost。例如:
jdbc:mysql://192.168.15.25:3306/yourdatabase
确保没有防火墙阻止访问端口3306
另外,请确保您正在连接的用户被允许从这个特定的主机名进行连接。对于开发环境,'username'@'%' 这样做是安全的。检查the user creation manual 和GRANT manual。
【讨论】:
您需要在连接字符串中传递远程机器的 IP/主机名。
import java.sql.*;
import javax.sql.*;
public class Connect
{
public static void main (String[] args)
{
Connection conn = null;
try
{
String url = "jdbc:mysql://localhost:3306/mydb";
Class.forName ("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection (url,"root"," ");
System.out.println ("Database connection established");
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (conn != null)
{
try
{
conn.close ();
System.out.println ("Database connection terminated");
}
catch (Exception e) { /* ignore close errors */ }
}
}
}
}
【讨论】:
String url = "jdbc:mysql://172.18.227.237/struts2"; conn = DriverManager.getConnection(url,"root","admin");。但现在我收到错误,`com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Access denied for user 'root'@'172.20.169.174' to database 'struts2'。我已经获得了对mysql服务器的远程访问权限。
要从远程机器访问数据库,您需要授予数据库所有权限。
运行以下脚本以授予权限: 将 . 上的所有权限授予 user@'%' IDENTIFIED BY 'password';
【讨论】:
另外,您应该确保 MySQL 服务器的配置(/etc/mysql/my.cnf,Debian 上的 /etc/default/mysql)没有激活“skip-networking”并且没有专门绑定到环回接口 (127.0.0.1) 也可以连接到您要连接的接口/IP 地址。
【讨论】:
sudo /etc/init.d/mysql restart重启远程机器上的mysql。
在架构“mysql”(mysql.user)中创建一个新用户
在您的 mysql 工作空间中运行此代码
“GRANT ALL ON . to user@'%'IDENTIFIED BY '';
在拥有数据库的机器上打开“3306”端口。
Control Panel ->
Windows Firewall ->
Advance Settings ->
Inbound Rules ->
New Rule ->
Port ->
Next ->
TCP & set port as 3306 ->
Next ->
Next ->
Next ->
Fill Name and Description ->
Finish ->
尝试通过 cmd 上的 telnet msg 进行检查,包括 DB 服务器的 IP
【讨论】:
关闭所有打开并连接到服务器监听端口的连接,无论它来自应用程序或客户端工具(navicat)还是正在运行的服务器(apache 或 weblogic)。先关闭所有连接,然后重启所有工具 MySQL、apache 等。
【讨论】:
在my.cnf文件中,请更改以下内容
## 现在默认只监听而不是跳过网络 ## localhost 更兼容且安全性更高。 ## 绑定地址 = 127.0.0.1
【讨论】:
在 Ubuntu 上,在创建 localhost 和 '%' 版本的用户,并为两者授予对 database.tables 的适当访问权限后,我不得不注释掉 /etc/mysql/mysql.conf 中的 'bind-address'。 d/mysql.cnf 并以 sudo 重新启动 mysql。
【讨论】: