Exodica Blog Otro blog de esos….

9Sep/110

Usando Sphinx con UTF-8 (resolviendo problemas)

utf-8Siempre hay algun problema con el encoding, en mi caso para resolver estas batallas, hace años que hago absolutamente TODO en UTF-8, no hay otro encoding!, es el universal, el unicode que sirve para todo y alque tendriamos que tener como estandar defacto en todo! Hasta donde me acuerdo MySQL seguia usando latin1 por default... no se puede...

En fin, luego de tener la Base de datos 100% UTF-8 (eso quiere decir a la hora de crear cada tabla y en ocaciones campos) al pasar los datos a Sphinx siempre tenia uno que otro problema, y bueno solo hacia falta averiguar un poco.

En un motor de busquedas como es el sphinx no nos interesa mucho tener caracteres raros, no nos interesa que el que busque te no encuentre té, todo lo contrario, los errores de ortografia del lado del que busca o de nuestra data los queremos juntos, si yo busco cazería me gustaria que encuentre tambien cazeria, eso se hace con una tabla de reemplazo de caracteres, basicamente es decirle al sphinx, ú => u, al indexar los datos o buscarlos, cuando le mandemos una ú, la reemplazara por u automaticamente.

Eureka! eso era todo.... no....

13Jan/101

MySQL colgado con conexiones “unauthenticated user”

bug_no_400Nada mejor que estar llegando al trabajo y que te avisen que hay un par de sitios caídos, esta confortable noticia me llego el otro día, u no tarde en encontrar que el problema era que un MySQL no respondía, cuando le tiro un "show processlist", me encuentro con cientos de conexiones con este mensaje "unauthenticated user", obviamente las conexiones muertas...

Lo primero que hice fue hacer un fordward de las coxiones a otra DB de emergencia, y luego reiniciar los apache para matar las conexiones creadas que quedaban en la nada, una vez con el MySQL libre, chequíe un par de cosas, mientras buscaba el por qué se habia detonado esto...

Consola

Consola

Leyendo en la pagina de MySQL (bugs.mysql.com), encuentro la solución a mi problema. Y les paso a explicar como viene la mano:

MySQL para asegurarse de que la conexión entrante tiene permisos, hace una resolución de dominio, para saber si por ejemplo juacinto@eldominio.com tiene permiso, el tema es que dejo de andar el servidor DNS que estaba configurado en /etc/resolv.conf y MySQL no tenia de donde sacar esos datos. Hay una forma de desactivar esto, que al mismo tiempo aceleraria el tiempo de respuesta de MySQL.

Como este servidor estaba en una red cerrada, y no tenía salida directa a internet asi que solo necesitaba espesificar permisos por ips de red.

Para desabilitar esta función de MySQL y acelerar las cosas, se debe arrancar el server con el parametro "--skip-name-resolv", o bien ponerlo como opcion en /etc/my.conf  (En Debian es /etc/mysql/my.conf) debajo de la directiva [mysqld], cosa que nos quede:

# The MySQL server
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
log = /usr/local/log/mysql.log
skip-name-resolv

Esto ya quedo arreglado, y depués de eso todo anduvo bien hasta ahora.

Recuerden que si hacen esto, y tienen permisos para juancito@dominio.com, este dejaría de andar, lo mejor es ponerlo por IP, onda:  juancito@190.12.45.110, pero si no es posible hacer esto y tienen este problema, otra buena opción va a ser definir estos dominios en el archivo /etc/hosts, al estilo:

190.12.45.110                dominio.com

Bug Reportado: http://bugs.mysql.com/bug.php?id=8945

   
Cerrar
Enviar por Correo