[C con Clase] Error 10061 con Mysql

Steven R. Davidson vze266ft en verizon.net
Mar Feb 26 20:35:23 CET 2008


Hola Antonio,

Antonio Escalante wrote:
> 
> Primeramente antes de nada me gustaria agredeceros vuestra ayuda.
>  
> A lo que el problema se refiere, he de decir que aun persiste. He 
> modificado la tabla mysql.user, incluso he añadido
> especificamente un usuario prueba que solo puede concectarse desde mi ip 
> y nada. La tabla queda asi:
>  
> 
> +-----------+---------+
> 
> | host      | user    |
> 
> +-----------+---------+
> 
> | localhost | %	      |
> 
> | localhost | root    |
> 
> | antonio   | %	      |
> 
> | prueba    |88.9.211.137|
> 
> +-----------+---------+
> 
>  
> Incluso usando la herramienta mysql administrator con el usuario prueba 
> y con mi propia ip sigue sin haber solucion, lo curioso
> es que me tira la conexion con el error 10061 pero si que me dejar 
> hacerle ping a mi ip y hay respuesta que raro no?
>  

Esto significa que el servidor existe y está activo, por lo que el 
problema es los parámetros que pasas para conectarte al servidor de 
MYSQL, específicamente el "hospedador" (host).

Asegúrate de que realmente tienes el número IP correcto para tu máquina. 
No sé qué configuración tienes en tu red, pero ejecutando "ipconfig" en 
la consola te dará las conexiones y números IP que existen en tu 
sistema. No elijas el número IP de tu conexión, sino de tu adaptador de 
Ethernet (o lo que tengas). Por ejemplo, debería aparecer en pantalla 
algo como:

Windows IP Configuration

Ethernet adapter LAN:

         Connection-specific DNS Suffix  . :
         IP Address. . . . . . . . . . . . : 192.168.0.2
         Subnet Mask . . . . . . . . . . . : 255.255.255.0
         Default Gateway . . . . . . . . . : 192.168.0.1

PPP adapter PCI Adapter #1:

         Connection-specific DNS Suffix  . :
         IP Address. . . . . . . . . . . . : 167.23.10.78
         Subnet Mask . . . . . . . . . . . : 255.255.255.255
         Default Gateway . . . . . . . . . : 167.23.10.78

Obviamente, algunos datos serán diferentes a los que he expuesto aquí.

También puedes usar el nombre de tu PC en lugar del número IP cuando te 
conectas al servidor de MySQL.

> Por otro lado en modo debug ejecutando linea a linea y con localhost no 
> hay problema alguno es justo al cambiar localhost
> por la direccion de un host remoto (o mi ip) cuando me tira el error.
>  
> #include <stdio.h>
> #include <windows.h>
> #include <mysql.h>
> #include <mysqld_error.h>
> void main()
> {
>  MYSQL *myData;
>  char *servidor = "88.9.211.137";
>  myData = mysql_init(0);
>  if(mysql_real_connect(myData, servidor, "prueba", "123456", "mysql", 
> 3306, NULL, 0) == NULL)
>   printf("Error: %s", mysql_error(myData));
>  else
>   printf("Todo bien, hemos establecido conexion con el servidor\n");

Deberías cerrar la conexión a MySQL invocando 'mysql_close()'. Sé que se 
trata de un ejemplo, pero lo menciono para aclarar el asunto.

> }
>  
> He hecho pruebas cambiando el usuario prueba por ejemplo por prueVa y ni 
> siquiera me da error referente a usuario
> desconocido porque ni llega al parametro usuario, en cuanto topa con el 
> parametro host lanza el error.
>  

Bueno, debo decir que tienes un error en la tabla "mysql.user". La 
primera entrada está mal y la segunda es correcta. No estoy seguro sí 
tienes uno o dos errores en la tercera, y con la cuarta te aseguro que 
está mal. Si quieres permitir a cualquier usuario de 'localhost', 
entonces debes indicar un usuario en blanco; no puedes usar el comodín 
"%". Esto sería,

+-----------+---------+
| host      | user    |
+-----------+---------+
| localhost | 	      |
+-----------+---------+

En MYSQL, esto sería una actualización,

mysql> update mysql.user set user='' where user='% and host='localhost';

Según la tercera entrada (o fila), tu máquina se llama "antonio" y 
quieres permitir al usuario "%" acceso. Creo que querías indicar lo 
inverso: cualquier máquina por el usuario "antonio". Esto sería,

mysql> update mysql.user set host='%',user='antonio' where host='antonio';

Obtendremos,

+-----------+---------+
| host      | user    |
+-----------+---------+
| localhost | 	      |
| localhost | root    |
| %	    | antonio |
+-----------+---------+


Con la última entrada que tienes, nuevamente, debería ser al revés; esto es,

mysql> update mysql.user set host='88.9.211.137',user='prueba' where 
host='prueba';

Obtendremos,

+--------------+---------+
| host         | user    |
+--------------+---------+
| localhost    | 	 |
| localhost    | root    |
| %	       | antonio |
| 88.9.211.137 | prueba  |
+--------------+---------+

Para cerciorarnos de que el sistema realiace estos cambios, ejecuta 
"flush". Por ejemplo,

mysql> flush tables, privileges;


Viendo el número IP, debo reiterar que posiblemente éste no sea el 
número de IP de tu máquina. Parece que es el número IP de tu router u 
otro servidor. Nuevamente, desconozco tu configuración de red, por lo 
que es posible que todo esté en orden.


Espero que todo esto te sirva de ayuda.

Steven






Más información sobre la lista de distribución Cconclase