使用Java连接到远程MySQL服务器

时间:2014-06-13 14:42:34

标签: java mysql database

我正在编写一个程序来将东西推送到远程数据库中。我的数据库存储在一个redhat服务器上,而我的程序是在windows机器上编写的。

我不想透露我的服务器地址,但可以说我的Linux服务器是xx.xx.xx.xx8

Windows中的MySQL Workbench说我的mysql服务器主机是127.0.0.1:3306

我知道有一百万个类似的问题,但每个问题都非常独特。

我一直在使用http://www.vogella.com/tutorials/MySQLJava/article.html#javaconnection作为指南,但这看起来像是本地连接。

我也一直在引用它,但这让我很困惑。

这是我认为可行的一些代码的模拟:

Connection connection = null;
String dburl = "jdbc:mysql://127.0.0.1:3306/Db_Name";
String userName = "user";
String passWord = "password";



 try {
        Class.forName("com.mysql.jdbc.Driver");

        connection = DriverManager.getConnection(dburl, userName, passWord);
        Statement st = connection.createStatement();                                 

        String query = "INSERT INTO Example (`TestColumn`) VALUES('hello')";
        int rsI = st.executeUpdate(query);
        System.out.println("Hi");
        }catch (Exception e) {
        System.out.println(e);
    } finally {
        if (connection != null) {
            try {
                connection.close();
                System.out.println("Database connection terminated");
            } catch (Exception e) { /* ignore close errors */ }
        }
    }

基于我提供的链接。我改变的只是地址。我不知道服务器地址xx.xx.xx.xx8应该去哪里。

4 个答案:

答案 0 :(得分:1)

要连接到远程数据库,您需要知道服务器的外部(或称为公共)IP地址。

String dburl = "jdbc:mysql://85.65.85.222:3306/Db_Name"

即使服务器上的数据库显示它侦听localhost:3306,您仍然可以使用具有正确端口的公共IP连接到它。 (假设您拥有对服务器的足够访问权限)

有时可能存在这样的情况:即使您知道远程服务器IP地址,您仍然无法直接连接到远程数据库,这可能是由于阻塞端口或其他ACL问题(如果您这样做,这是适用的)无法控制这一点)。但是,您可以创建到该服务器的ssh隧道并创建一个前向端口。

JSch jsch = new JSch();
Session session = jsch.getSession(user, host);
session.setPassword(password);
session.connect(timeout);
session.setPortForwardingL(listenPort, destHost, destPort);

示例ssh connnection可能如下所示:

ssh user@85.65.85.222 -Llocalhost:5050:127.0.0.1:3306< - 这将创建一个带端口转发的ssh隧道,这意味着在您拥有代码和整个环境的本地计算机上,您仍然可以使用

连接到远程数据库
String dburl = "jdbc:mysql://localhost:5050/dbname"

答案 1 :(得分:1)

只是为了让后来看到这个的人澄清......

localhost始终是您所坐的机器 - 始终。你无法使用localhost连接到远程盒子。此外,IP地址127.0.0.1相当于localhost,所以不要使用它。

您可能会看到数据库绑定到数据库服务器上的localhost或127.0.0.1。那没问题。在数据库连接URL

中使用运行数据库的服务器的IP地址
mysql:jdbc://<IPOfServer>:<PortOfServer>/<DbName>).

您可以通过在数据库服务器上运行以下命令来找到服务器的IP地址...

Windows:ipconfig

Linux:ifconfig

祝你好运!

答案 2 :(得分:0)

您可以看到documentation说的内容:

  

方法DriverManager.getConnection建立数据库   连接。此方法需要数据库URL,该URL会有所不同   取决于您的DBMS。以下是数据库的一些示例   网址:

     

MySQL:jdbc:mysql:// localhost:3306 /,其中localhost是其名称   托管数据库的服务器,3306是端口号

因此,对于MySQL Connector / J数据库URL

以下是MySQL Connector / J的数据库连接URL语法:

  

JDBC:MySQL的:// [主机] [,failoverhost ...]       [:端口] / [数据库]       [?propertyName1] [= propertyValue1]       [&安培; propertyName2] [= propertyValue2] ...

其中:

  • host:port 是托管数据库的计算机的主机名和端口号。如果未指定,则主机和端口的默认值分别为127.0.0.1和3306。因此,您执行的每项操作都将应用于此帖

  • database是要连接的数据库的名称。如果未指定,则建立连接而不使用默认数据库。

  • failover是备用数据库的名称(MySQL Connector / J支持故障转移)。
  • propertyName = propertyValue表示可选的以&符号分隔的属性列表。这些属性使您可以指示MySQL Connector / J执行各种任务。

更新:如果您有要访问的远程数据库(远程服务器),则应该具有以下功能:

String dburl = "jdbc:mysql://<REMOTE_HOST>:3306/Db_Name"; //replace with your remote host 
... // here all the code related to your remote host

注意:如果远程服务器在其配置中有&#34; localhost&#34;你必须通过执行ifconfig找出它的公共IP地址。然后在你的字符串上使用它的ip地址。作为重要,请注意您的远程服务器必须配置为允许远程连接。

答案 3 :(得分:0)

如果连接到服务器(即使用ip xx.xx.xx.xx8),则通过端口(通常为3306)指定要连接到该计算机上的数据库服务器。所以简单地使用:

String dburl = "jdbc:mysql://xx.xx.xx.xx8:3306/Db_Name";

作为你的连接字符串。

如果您不知道端口,mysql正在运行,请查看/etc/mysql/my.cnf文件。应该指定端口。

如果您无法连接并确保启用了远程连接,请查看您的防火墙规则(这是一个很好的教程来启用它:http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html)。