如何使用 Java 连接到远程 MySQL 数据库?
Posted
技术标签:
【中文标题】如何使用 Java 连接到远程 MySQL 数据库?【英文标题】:How to connect to a remote MySQL database with Java? 【发布时间】:2011-01-20 01:38:03 【问题描述】:我正在尝试使用 Eclipse IDE 创建 JSF 应用程序。我正在使用远程 mysql 服务器作为我的数据库。如何连接到此远程数据库以创建表并访问它们?
【问题讨论】:
【参考方案1】:只需在数据库连接字符串中提供远程计算机的 IP / 主机名,而不是 localhost
。例如:
jdbc:mysql://192.168.15.25:3306/yourdatabase
确保没有防火墙阻止访问端口3306
另外,请确保您正在连接的用户被允许从这个特定的主机名进行连接。对于开发环境,'username'@'%'
这样做是安全的。检查the user creation manual 和GRANT
manual。
【讨论】:
另外,请务必在您的 MySQL 架构中向该主机和用户授予适当的权限。 @Angeline:请接受这个答案,因为这是所提问题的正确答案 还要确保: (1) 您的 PC 的 IP 地址是允许远程连接到您的数据库服务器的 IP 地址之一。 (2) 您的数据库名称(如 URL 中给出的)将是该数据库的完整限定名称。因此,如果实际数据库名为 'web_shop' 并且它保存在一个名为 say 'angelazza' 的托管帐户上,那么您的数据库的完全限定名称是 'angelazza_web_shop' 。 并且 (3) 将上传到数据库服务器的 .sql 文件中的所有引用(假设您离线开发数据库并将其上传/粘贴到服务器)从“web_shop”更改为“angelazza_web_shop”以避免错误。【参考方案2】:您需要在连接字符串中传递远程机器的 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服务器的远程访问权限。
这个聚会有点晚了,但是:用“jdbc:mysql://172.18.227.237:3306/struts2”替换“jdbc:mysql://172.18.227.237/struts2”(注意端口号)。以防我身后的人犯同样的错误。
无论出于何种目的或原因,您永远无法使用 localhost 或 127.0.0.1 连接到远程计算机。【参考方案3】:
要从远程机器访问数据库,您需要授予数据库所有权限。
运行以下脚本以授予权限: 将 . 上的所有权限授予 user@'%' IDENTIFIED BY 'password';
【讨论】:
【参考方案4】:另外,您应该确保 MySQL 服务器的配置(/etc/mysql/my.cnf,Debian 上的 /etc/default/mysql)没有激活“skip-networking”并且没有专门绑定到环回接口 (127.0.0.1) 也可以连接到您要连接的接口/IP 地址。
【讨论】:
修改后记得通过sudo /etc/init.d/mysql restart
重启远程机器上的mysql。【参考方案5】:
在架构“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
【讨论】:
当你在 NAT 之后进行端口转发! 我对那里的第二个答案理解得更好:***.com/questions/1700518/…【参考方案6】:关闭所有打开并连接到服务器监听端口的连接,无论它来自应用程序或客户端工具(navicat)还是正在运行的服务器(apache 或 weblogic)。先关闭所有连接,然后重启所有工具 MySQL、apache 等。
【讨论】:
【参考方案7】:在my.cnf文件中,请更改以下内容
## 现在默认只监听而不是跳过网络 ## localhost 更兼容且安全性更高。 ## 绑定地址 = 127.0.0.1
【讨论】:
【参考方案8】:在 Ubuntu 上,在创建 localhost 和 '%' 版本的用户,并为两者授予对 database.tables 的适当访问权限后,我不得不注释掉 /etc/mysql/mysql.conf 中的 'bind-address'。 d/mysql.cnf 并以 sudo 重新启动 mysql。
绑定地址 = 127.0.0.1
【讨论】:
以上是关于如何使用 Java 连接到远程 MySQL 数据库?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Android 应用程序通过 JDBC 连接到远程 MySQL 服务器
如何使用 JetBrains DataGrip 连接到远程 MySQL 数据库