如何使用 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 服务器

如何使用SSL JDBC连接到MySQL服务器

如何使用 JetBrains DataGrip 连接到远程 MySQL 数据库

PHP当中如何使用Wampserver连接到Mysql数据库以及怎样使用

如何在Mac的MAMP中允许远程连接到mysql数据库

JAVA如何连接到sqlserver