Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: alki en 1 Noviembre 2009, 14:01 pm



Título: url de mi base de datos MySQL
Publicado por: alki en 1 Noviembre 2009, 14:01 pm
Buenas a todos!!

Tengo acceso shell a mi servidor con CentOS. Tengo instalado MySQL en la maquina, y tengo un programita en java y quiero que acceda a una de las bases de datos. El problema es que me dice que no se ha podido establecer conexion.
Me imagino que es por la url que le estoy poniendo.

He probado todas las combinaciones que se me han ocurrido y nada.

¿Alguien sabe de que modo podria averiguar cual es la url de la base de datos?

Tambien me he planteado que el programa estuviese mal. Me he descargado un pack de MySQL que trae entre otros MySQL Administrator, y tampoco he podido conectarme con la base de datos.


Muchas gracias.

Un Saludo


Título: Re: url de mi base de datos MySQL
Publicado por: ^Tifa^ en 1 Noviembre 2009, 17:21 pm
Si tienes acceso Shell remoto a tu Centos (EL cual posee la base de datos) podrias utilizar como host hacia tu MySQL la IP o nombre de dominio que utilizas para conectarte remoto via shell a ese Centos????


Título: Re: url de mi base de datos MySQL
Publicado por: alki en 1 Noviembre 2009, 17:48 pm
Hola.

Gracias por la respuesta :)

Mismo error haciendolo con la ip del server:
Código:
java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.SocketException: java.net.ConnectException: Connection refused

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: java.net.ConnectException: Connection refused

STACKTRACE:

java.net.SocketException: java.net.ConnectException: Connection refused
        at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:143)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:225)
        at com.mysql.jdbc.Connection.createNewIO(Connection.java:1805)
        at com.mysql.jdbc.Connection.<init>(Connection.java:452)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at GestorBBDD.conectar(GestorBBDD.java:26)
        at GestorBBDD.main(GestorBBDD.java:58)


** END NESTED EXCEPTION **


        at com.mysql.jdbc.Connection.createNewIO(Connection.java:1875)
        at com.mysql.jdbc.Connection.<init>(Connection.java:452)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at GestorBBDD.conectar(GestorBBDD.java:26)
        at GestorBBDD.main(GestorBBDD.java:58)
Excepcion 2
:-\

Un Saludo


Título: Re: url de mi base de datos MySQL
Publicado por: ^Tifa^ en 1 Noviembre 2009, 17:53 pm
Citar
Connection refused

Interesante  :P

1 - Estas intentando conectarte con el usuario 'root' de MySQL de forma remota?
2 - Cuando accesas por ssh a Centos, haz intentando una vez logueado en Centos abrir una conexión a MySQL (Dentro de Centos) con el mismo usuario con el cual intentas conectarte remoto... eres capaz de acceder a MySQL conectado por SSH ?



Título: Re: url de mi base de datos MySQL
Publicado por: alki en 1 Noviembre 2009, 17:57 pm
Hola :)

He probado en el codigo con el administrador de mysql y con el usuario propio que le asigne a la base de datos y nada.

He probado desde el shell lo siguiente:
mysql -h localhost -u user -ppassword

Y me deja conectarme, una vez dentro puedo hacer use db; que tambien me deja, osea que puedo conectarme y encuentra la base de datos...

En respuesta a 1. El programa java, lo ejecuto en el mismo sistema donde se encuentra la base de datos.

Puedo acceder a mysql desde el shell.. como admin y como el user asignado a la db.

Muchas gracias.

Un Saludo


Título: Re: url de mi base de datos MySQL
Publicado por: braulio-- en 1 Noviembre 2009, 18:31 pm
Pues si lo ejecutas desde CentOS porque no le pasas la dirección localhost?


Título: Re: url de mi base de datos MySQL
Publicado por: alki en 1 Noviembre 2009, 19:10 pm
Hola.

Le he pasado tmb localhost/db
Pero me muestra el mismo mensaje. He probado todo lo que se me podia ocurrir :S

Un Saludo


Título: Re: url de mi base de datos MySQL
Publicado por: rob1104 en 1 Noviembre 2009, 19:26 pm
Hola, coloca el codigo de java donde estableces la conexion, estoy seguro que el problema esta ahi.

Saludos


Título: Re: url de mi base de datos MySQL
Publicado por: alki en 1 Noviembre 2009, 19:33 pm
Hola

Código
  1. public class GestorBBDD {
  2.  
  3.        public static Connection conectar() throws ClassNotFoundException, SQLException{
  4.  
  5.                try {
  6.  
  7.                        Class.forName("com.mysql.jdbc.Driver");
  8.                        Connection c = DriverManager.getConnection("jdbc:mysql://localhost/db","user","pass");
  9.                        System.out.println("Conexión realizada");
  10.                        return c;
  11.  
  12.                } catch (ClassNotFoundException e) {
  13.                        e.printStackTrace();
  14.                        throw e;
  15.                } catch (SQLException e) {
  16.                        e.printStackTrace();
  17.                        throw e;
  18.  
  19.                }
  20.  
  21.        }
  22.  
  23.  
  24.        public static void desconectar(Connection c) throws SQLException{
  25.  
  26.                try {
  27.                        c.close();
  28.                } catch (SQLException e) {
  29.                        e.printStackTrace();
  30.                        throw e;
  31.                }
  32.  
  33.        }
  34.  
  35.        /* Programa de prueba  */
  36.                public static void main(String[] args) {
  37.                try{
  38.                        conectar();
  39.                        System.out.println("Excepcion 1");
  40.                } catch (SQLException e) {
  41.                        System.out.println("Excepcion 2");
  42.  
  43.                }
  44.                }
  45. }
  46.  
  47.  

Un Saludo


Título: Re: url de mi base de datos MySQL
Publicado por: ^Tifa^ en 1 Noviembre 2009, 20:03 pm
Perfecto vamos avanzando  :-*

No se nada sobre Java, por ende no puedo adjudicar si tu codigo es del problema o esta bien o este mal. Me baso en la situacion que dijiste que utilizando otras aplicaciones te ocurre lo mismo al querer conectarte a MySQL:

'Conection refused'

 :P

Sin embargo te permite conectarte plenamente mediante el cliente local 'mysql' pero no te deja conectarte mediante ninguna aplicacion de terceros.... mas interesante aun  :rolleyes:

Ya que tienes acceso a ese Centos (No se hasta que nivel tienes acceso a sus archivos), pero podrias verificar si el puerto 3306 (el default de MySQL) esta abierto? Se que puede sonar tonto, pero MySQL en sistemas Linux/Unix tiene 2 maneras de ejecutarse, mediante puerto TCP/IP y mediante Sockets. Las ultimas versiones de MySQL vienen a ejecutarse mediante Sockets y no por puerto TCP/IP evitando que aplicaciones de terceros no se puedan conectar porque solicitan el puerto 3306 abierto (Aunque no digo 100% que este sea tu problema, sino una posibilidad).

Verifica con el comando el siguiente comando si el puerto 3306 esta abierto:

bash$ netstat -tunap | grep 3306

Sino te sale nada, bueno podemos asumir que a lo mejor lo modificaron para que corra en otro puerto (Y no el defecto) entonces haz:

bash$  netstat  -tunap | grep mysql*

Si te aparece otro puerto distinto al 3306, tendras que decirle al API que usa Java para conectarse a MySQL que el puerto no es 3306 sino el indicado por netstat, ahora sino te aparece nada de nada, porfavor notificalo para proseguir al siguiente paso. (Ya que si esto ultimo ocurre MySQL esta escuchando por Sockets y no por TCP/IP).


Título: Re: url de mi base de datos MySQL
Publicado por: alki en 1 Noviembre 2009, 20:11 pm
Hola.

Pues no, no sale nada de ningun modo. Asi que sera que esta a la espera de sockets, no?

Muchas gracias.

Un Saludo


Título: Re: url de mi base de datos MySQL
Publicado por: ^Tifa^ en 1 Noviembre 2009, 20:35 pm
No sale nada? vaya.

Sino sale nada, y el JDBC de ese Conector Java solo funciona a traves de peticiones TCP/IP necesitas ese puerto abierto. Hay una manera de abrirlo, pero tendrias que editar el archivo my.cnf de MySQL y yo desconozco hasta que nivel de acceso y privilegios tienes en dicho servidor de Centos.

En el caso de las API en C, Perl si es posible conectarse a MySQL independientemente este el puerto TCP/IP abierto o este gestionandose por Sockets. Pero en el caso del conector de Java, yo desconozco plenamente si solo soporta conectarse a traves de TCP/IP y no de Sockets.

Si tienes acceso pleno a los archivos del servidor, busca el my.cnf  generalmente esta en /etc abrelo y busca alguna linea referente a :

skip-networking

Debe estar descomentada, ya que no te aparece MySQL a escucha de ningun puerto TCP/IP por ende tienes que comentarla

#skip-networking

Guardar los cambios, y reiniciar el motor MySQL, sino aparece dicha referencia en my.cnf agregasela manualmente y comentada o busca el script de inicio de MySQL en /etc/init.d y solicita si tiene skip-networking en alguna parte y comentalo. Luego reinicia el servidor y confirma que dicho puerto esta abierto:

bash$ netstat -tunap | grep mysql*

debe aparecer el 3306

Luego de esto podrias deber conectarte sin problema (Siempre y cuando me remito el JDBC de Java solo funcione a traves de peticiones TCP/IP) en caso que no funcione aun, haz verificado si tu Centos tiene un firewall??? Haz intentado conectarte a MySQL con otra aplicacion (No MySQL Administrator ya que creo que esta basado en Java y utiliza el JDBC de Java) una aplicacion independiente a Java pero que conecte a MySQL?


Título: Re: url de mi base de datos MySQL
Publicado por: -Ramc- en 1 Noviembre 2009, 21:04 pm
Si, sí no le sale ningún puerto, ese es el problema, sólo funciona con TCP/IP a mí me tocó comentar la línea skip-networking en la configuración, para poder programar con el JDBC.

edit: alki disculpame que no te ayudara más por el otro post donde tenías esto mismo, es que la U ya no me deja tiempo. :xD


Título: Re: url de mi base de datos MySQL
Publicado por: ^Tifa^ en 1 Noviembre 2009, 21:31 pm
Aun tengo la curiosidad. Lo del TCP/IP es una posibilidad pero si logras abrir dicho puerto y aun tienes problemas de conexión, me gustaria que intentes conectarte a MySQL con oro lenguaje que no use el JDBC de Java (Ya que creo que las aplicaciones que descargaste usan el JDBC de Java)

Mira el siguiente codigo en C (SOlo para probar chiquito  :-* )

Cita de: c

#include <stdio.h>
#include <mysql/mysql.h>

int main() {
   MYSQL *conn;
   MYSQL_RES *res;
   MYSQL_ROW row;

   char *server = "localhost";
   char *user = "marian";
   char *password = "marian"; /* set me first */
   char *database = "primaria";

   conn = mysql_init(NULL);

   /* Connect to database */
   if (!mysql_real_connect(conn, server,
         user, password, database, 0, NULL, 0)) {
      fprintf(stderr, "%s\n", mysql_error(conn));
      return 1;
   }

   /* send SQL query */
   if (mysql_query(conn, "show tables")) {
      fprintf(stderr, "%s\n", mysql_error(conn));
      return 1;
   }

   res = mysql_use_result(conn);

   /* output table name */
   printf("MySQL Tables in mysql database:\n");
   while ((row = mysql_fetch_row(res)) != NULL)
      printf("%s \n", row[0]);

   /* close connection */
   mysql_free_result(res);
   mysql_close(conn);

return 0;

};



Mueve esto a tu servidor Centos, cambiando claro esta las definiciones de las variables por las correspondientes tuyas corazon  :rolleyes:  Ya que MySQL viene con el API C integrado no requeriras descargarte nada 'extra' para compilar lo anterior.

Lo puedes compilar con el siguiente comando:

gcc -s -L/usr/lib/mysql -lmysqlclient -lz  aplicacion.c

Y ejecutarlo si te conecta, entonces ya el inconveniente es con el JDBC de Java :) ya que usaste una aplicacion que no usa el JDBC de Java y conecto.


Título: Re: url de mi base de datos MySQL
Publicado por: Jubjub en 1 Noviembre 2009, 21:35 pm
Si lo haces remoto, tienes que activarlo en los conf del mysql ;D


Título: Re: url de mi base de datos MySQL
Publicado por: alki en 2 Noviembre 2009, 20:29 pm
Por fin!!!!

Muchisimas gracias en especial a ^TiFa^  y a -Ramc-  ;D

Comente la linea, y reinicie el mysql, probe la aplicacion y conecta  ;D

^TiFa^ si de mi dependiese seguramente hubiese hecho todo esto de otro modo, en otro lenguaje o algo jejeje. Pero es una web que no hice yo y la estoy trasladando de servidor. Es mas aun tiene errores.. Pero al menos ya se que se conecta bien a la base de datos  ;D

Muchas gracias de nuevo

Un Saludo!!


Título: Re: url de mi base de datos MySQL
Publicado por: ^Tifa^ en 3 Noviembre 2009, 01:53 am
De nada ternura  :-*   :-*    :-*

Hay JDBC de ciertos lenguajes que soportan conectarse a traves de Sockets por MySQL, asi como el API C de MySQL, aparentemente el JDBC de java solo va por TCP/IP (Aunque este punto no lo se, lo asumo en base a tus resultados). Por ello te sugeri comentar el dichoso 'Skip-Networking' que tanto mortifica a programadores que desconocen esta funcionalidad de un servidor MySQL instalado sin modificaciones.

Me alegra mucho que hayas podido resolver tu inconveniente corazon  :rolleyes: estoy segura que ahora saldras mas a flote con la web.

Besotes   :-*    :-*    :-*