2010-02-23 95 views

Respuesta

35

Simplemente proporcione el IP/nombre de host de la máquina remota en su cadena de conexión de base de datos, en lugar de localhost. Por ejemplo:

jdbc:mysql://192.168.15.25:3306/yourdatabase 

Asegúrese de que no bloquee la el acceso al puerto 3306

también sin cortafuegos, asegúrese de que el usuario se está conectando con el se le permite conectarse desde este nombre de host en particular. Para entornos de desarrollo, es seguro hacerlo por 'username'@'%'. Compruebe the user creation manual y el GRANT manual.

+3

Además, asegúrese de otorgar los permisos apropiados a ese host y usuario en su esquema MySQL. – duffymo

+2

@Angeline: Por favor, acepte esta respuesta, ya que esta es la respuesta correcta para la pregunta –

+0

También asegúrese de que: (1) La dirección IP de su PC esté entre las direcciones IP permitidas para conectarse de forma remota a su servidor de base de datos. (2) El nombre de su base de datos, como figura en la URL, será el nombre completo calificado para esa base de datos.Entonces, si la base de datos real se llama 'tienda_web' y se almacena en una cuenta de hosting llamada 'angelazza', el nombre completo de la base de datos es 'angelazza_web_shop'. – Trunk

7

Necesita pasar IP/nombre de host de la máquina de rempote en la cadena de conexión.

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 */ } 
      } 
     } 
    } 
} 
+0

En lugar de un host local, reemplacé mi dirección de máquina remota. este es el código: 'String url =" jdbc: mysql: //172.18.227.237/struts2 "; conn = DriverManager.getConnection (url, "root", "admin") ';. Pero ahora me sale el error, 'com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Acceso denegado para el usuario 'root'@'172.20.169.174' a la base de datos 'struts2'. Obtuve acceso remoto al servidor mysql. – Angeline

+0

Un poco tarde para la fiesta con esto, pero: reemplace "jdbc: mysql: //172.18.227.237/struts2" con "jdbc: mysql: //172.18.227.237: 3306/struts2" (tenga en cuenta el número de puerto). En caso de que alguien detrás de mí cometa este mismo error. – Kingsolmn

+0

Nunca, nunca, por ningún motivo o propósito, podrá conectarse a una máquina remota utilizando localhost o 127.0.0.1. –

2

Además, usted debe asegurarse de configuración del servidor MySQL (/etc/mysql/my.cnf,/etc/default/MySQL en Debian) no tiene "skip-networking" activado y no binded exclusivamente a la interfaz loopback (127.0.0.1) pero también a la interfaz/dirección IP a la que desea conectarse.

+0

Recuerde reiniciar mysql en la máquina remota mediante 'sudo /etc/init.d/mysql restart' después de este cambio. – cindyxiaoxiaoli

4

Para acceder a la base de datos desde la máquina remota, debe otorgar otorgar todos los privilegios a su base de datos.

ejecute la siguiente secuencia de comandos para otorgar permisos: OTORGUE TODOS LOS PRIVILEGIOS EN . TO usuario @ '%' IDENTIFICADO POR 'contraseña';

0

en el archivo my.cnf, por favor cambie la siguiente

## En lugar de saltar de redes por defecto es ahora para escuchar sólo en localhost ## que es más compatible y no es menos seguro. ## bind-address = 127.0.0.1

1
  1. Crear un nuevo usuario en el esquema 'mysql' (mysql.user) Ejecutar este código en su espacio de trabajo MySQL “GRANT ALL ON . to [email protected]'%'IDENTIFIED BY '';

  2. Abra la Puerto '3306' en la máquina que tiene la base de datos. 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. tratar de comprobar por un msg telnet en cmd incluyendo IP del servidor de base de datos

+0

¡Y reenvío de puertos cuando está detrás de NAT! – zerocool

+0

Entendí mejor con la 2da respuesta allí: http://stackoverflow.com/questions/1700518/remote-mysql-database-access – Gurvan

1

Cerrar todas las conexiones que está abierto & conectado al servidor de puerto de escucha, sea lo que sea de aplicación o del lado del cliente herramienta (navicat) o en el servidor en ejecución (apache o weblogic). Primero cierre todas las conexiones y luego reinicie todas las herramientas MySQL, apache, etc.

Cuestiones relacionadas