Siguen los errores con el MYSQL !

Forums: 

Señores,
El error que semanas atrás tuve con el Mysql fue solucionado con modificaciones que realice, pero la felicidad duro poco :(.
En estos días están siendo frecuentes estos errores
2005.Unknown MySQL server host 'mysql' (0)
2004.Can't create TCP/IP socket (24)
.
La aplicación maneja threads. Cada hilo se conecta a la base de datos. Realiza operaciones sobre tablas, cierra la conexión y termina el hilo.
Lo raro es que el problema de conexion no se da a cada rato.. Supongamos que quiero conectarme 1000 veces..
De esas 1000 veces son 250 la que tienen errores de conexion. Se dan de forma alternada.. 20 veces se conecta.. 2 no. Luego de nuevo 100 se conectan 15 no..
El comportamiento varia mucho.
Lo último que hice hoy fue probar solo la conexión a la base de datos. El resto del funcionamiento de la aplicación fue comentado.
Sinceramente no se que puede ser.. que estaré haciendo mal....
Esta es la función que realiza la conexión.

int makeMysqlConnect(MYSQL *dbConn, const char *szHost, const char *szUser, const char *szPass,
const char *szDatabase, unsigned int iPort)
{

time_t hora_inic, hora_fin;
int temps;
hora_inic = time(NULL);
pthread_t tid = pthread_self();

printf("[%lu]szHost %s\n", tid,szHost);
printf("[%lu]szUser %s\n", tid,szUser);
printf("[%lu]szPass %s\n", tid,szPass);
printf("[%lu]iPort %d\n", tid,iPort);

if (mysql_init(dbConn))
{

if (mysql_real_connect(dbConn, szHost , szUser, szPass, NULL, iPort , NULL, 0))
{

if(!mysql_select_db(dbConn, szDatabase))
{
printf("[%lu]Fallo en seteo de autocommit = false. %u.%s\n", tid, mysql_errno(dbConn), mysql_error(dbConn));
closeMysql(dbConn);
return GENERIC_ERROR;
}
else
{
printf("[%lu]Fallo en la seleccion de base de datos. %u.%s\n", tid, mysql_errno(dbConn), mysql_error(dbConn));
closeMysql(dbConn);
return GENERIC_ERROR;
}
}
else
{

printf("[%lu]Fallo en la conexion a la base de datos. %u.%s\n", tid, mysql_errno(dbConn), mysql_error(dbConn));
closeMysql(dbConn);
return GENERIC_ERROR;

}

}
else
{
printf("[%lu]No se puedo crear el objeto MYSQL\n", tid);
return GENERIC_ERROR;
}

hora_fin = time(NULL);
temps=hora_fin - hora_inic;
printf("[%lu]Tiempo ejecucion en conectarse a la BD : %d segs\n",tid, temps);
return PROCESS_OK;

}
Estoy atenta a comentarios. Muchas Gracias!

El error indica que no puede

Imagen de acl

El error indica que no puede convertir el nombre de host "mysql" a una dirección ip. Verifica que /etc/hosts de la máquina que corre tu programa tenga una línea que asocie "mysql" con el ip de loopback:


127.0.0.1 nombredelamaquina unalias otroalias ... mysql ...

O que tus dns pueden resolver ese nombre.

Hola Acl.. Gracias por la

Hola Acl..
Gracias por la respuesta. Puse el ip en lugar del nombre , pero igual sigue el error...
Tengo una duda.. si fuese el problema que me dijiste este tendria que ser constante? O sea que pase cada vez que te intente conectarme, verdad?
Como comentaba algunas conexiones todo ok pero otras no. Pasa en cualquier momento.
Que otra cosa podria ser?

Que querys ejecutas?

Imagen de alfamikedelta

Hola!

Yo creo que la cosa depende de los querys que ejecutes...

Hay algunos querys que bloquean la base de datos o tablas hasta que éstos se completan, en consecuencia cualquier otra petición se deberá poner en un buffer en espera de que se libere el recurso.

Si estas haciendo demasiada cantidad de querys en un tiempo corto provocarás una denegación de servicios por saturación del buffer, lo que generará mensajes de servidor no encontrado o desconocido y problemas de conexión.

Si tu base de datos debe soportar altas cargas de transacciones, deberías implementar algún sistema de balanceo de cargas en el servidor para evitar la saturación del buffer.

Si es solamente tu aplicación la que genera la saturación del servidor, podrías probar limitando la cantidad de hilos que se ejecuten al mismo tiempo y ademas implementar un buffer localmente (en donde se ejecuta la aplicación) que almacene los querys o las peticiones de conexión hasta que algún hilo termine.

Suerte con eso!

El error indica que no puede

Imagen de NEO

El error indica que no puede resolver el nombre del host. O que no lo encuentra

Te recomiendo que uses los comandos

tail -f /var/log/mysqld.log

y

tail -f /var/log/messages

En diferentes consolas, y el momento que empieza a fallar vayas a ver que mensajes te está dando.

También te recomiendo mucho que utilices MySql Administrator, ahi tienes una sección para monitoreo muy útil para estos casos "HEALTH" con la cual podrás medir si se está sobrecargando de alguna manera tu motor de BD.

Nos cuentas cómo te va!

Suerte
NEO

Hola Neo.. Ejecute mi

Hola Neo..
Ejecute mi aplicacion.. y abri los logs que me dijiste. Los logs no se movian...
No se mucho de MYSQL pero creo que los mismo deberian de mostrar las sentencias que se estan ejecutando , es asi? O solo se mueven cuando hay algun error?
Tal vez el uso de estos logs no esten habilitados, puede ser? Si es asi donde los habilito.
Gracias.