【问题标题】:How to connect to a remote MySQL database with Java?如何使用 Java 连接到远程 MySQL 数据库?
【发布时间】:2011-01-20 01:38:03
【问题描述】:

我正在尝试使用 Eclipse IDE 创建 JSF 应用程序。我正在使用远程 mySQL 服务器作为我的数据库。如何连接到此远程数据库以创建表并访问它们?

【问题讨论】:

    标签: java mysql eclipse jdbc


    【解决方案1】:

    只需在数据库连接字符串中提供远程计算机的 IP / 主机名,而不是 localhost。例如:

    jdbc:mysql://192.168.15.25:3306/yourdatabase
    

    确保没有防火墙阻止访问端口3306

    另外,请确保您正在连接的用户被允许从这个特定的主机名进行连接。对于开发环境,'username'@'%' 这样做是安全的。检查the user creation manualGRANT 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】:
      1. 在架构“mysql”(mysql.user)中创建一个新用户 在您的 mysql 工作空间中运行此代码 “GRANT ALL ON . to user@'%'IDENTIFIED BY '';

      2. 在拥有数据库的机器上打开“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 ->

      3. 尝试通过 cmd 上的 telnet msg 进行检查,包括 DB 服务器的 IP

      【讨论】:

      【解决方案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

          【讨论】:

            猜你喜欢
            • 2015-01-29
            • 2011-12-06
            • 2013-02-13
            • 1970-01-01
            • 2010-12-30
            • 1970-01-01
            • 1970-01-01
            • 2012-10-20
            相关资源
            最近更新 更多