MySQL RealTime: Failed to connect database server

919 views
Skip to first unread message

Iñaki

unread,
Jul 27, 2006, 12:10:42 PM7/27/06
to aster...@googlegroups.com
Hola, estoy tratando de configurar Asterisk para que contacte con una base de
datos MySQL en la misma máquina y recuperar de ella info sobre los usuarios
(en vez de en sip.conf).

Resumiendo el error que me sale es:

ERROR[21328]: res_config_mysql.c:615 mysql_reconnect: MySQL RealTime: Failed
to connect database server asterisk on localhost.

aunque al final de este correo pego un error mucho más sugerente extraido de
los logs de Asterisk.


Se trata de una Debian Sarge con Asterisk 1.2.10 instalado desde las fuentes
tras haber instalado previamente mysql-server y libmysqlclient14-dev (entre
muchos otros paquetes necesarios para compilar Asterisk).

He instalado Asterisk-addons-1.2.3 siguiendo estos pasos:

# apt-get install libdbd-mysql-perl
# cd asterisk-addons-1.2.3
# make clean
# make install

He comrobado que se genera el módulo "res_config_mysql.so"
en /usr/lib/asterisk/modules.

He creado una base de datos "asterisk" con una tabla "sip_buddies" siguiendo
los pasos de http://www.voip-info.org/wiki/view/Asterisk+RealTime+Sip

Es decir:

--extconfig.conf--
sipusers => mysql,asterisk,sip_buddies
sippeers => mysql,asterisk,sip_buddies

--res_mysql.conf y res_config_mysql.conf-- (no sé cuál es el necesario)
[general]
dbhost = localhost
dbname = asterisk
dbuser = asterisk
dbpass = *******
;dbport = 3306
socket = /var/run/mysqld/mysqld.sock


Cuando arranco Asterisk dice:
Parsing /etc/asterisk/extconfig.conf
== Binding sipusers to mysql/asterisk/sip_buddies
== Binding sippeers to mysql/asterisk/sip_buddies

Pero nunca llega a conectarse a MySQL, ya que monitorizo la salida de
"tail -f /var/log/mysql.log" y no existe conexión alguna desde Asterisk.

El CLI me dice:
CLI> realtime mysql status
Jul 27 17:54:54 ERROR[24644]: res_config_mysql.c:615 mysql_reconnect: MySQL
RealTime: Failed to connect database server asterisk on 127.0.0.1. Check
debug for more info.


Tengo el vervose y el debug muy altos, pero sólo obtengo un error más claro
mirando el /var/log/asterisk/messages que me dice:


Jul 27 18:04:35 WARNING[25173] res_config_mysql.c: MySQL RealTime: No database
port found, using 3306 as default.
Jul 27 18:04:35 WARNING[25173] res_config_mysql.c: MySQL RealTime: No database
socket found, using '/tmp/mysql.sock' as default.
Jul 27 18:04:35 ERROR[25173] res_config_mysql.c: MySQL RealTime: Failed to
connect database server asterisk on 127.0.0.1. Check debug for more info.
Jul 27 18:04:35 WARNING[25173] res_config_mysql.c: MySQL RealTime: Couldn't
establish connection. Check debug.
Jul 27 18:04:35 NOTICE[25173] config.c: Registered Config Engine mysql
Jul 27 18:04:35 WARNING[25173] cdr_addon_mysql.c: Unable to load config for
mysql CDR's: cdr_mysql.conf

Así que parece evidente que no está mirando en los archivos "res_mysql.conf"
ó "res_config_mysql.conf" y no sabe cómo conectarse a la BD. ¿Alguien podría
aclararme cómo y dónde debo definir la base de datos a la que conectarse? ¿o
bien comentarme qué es lo que hago mal?


Muchas gracias por cualquier ayuda y un saludo.


--
Iñaki Baz

Maximiliano J. Goldsmid

unread,
Jul 27, 2006, 12:31:38 PM7/27/06
to aster...@googlegroups.com
Hola

dos consultas:
1) Y desde el log de mysql que ves?
2) si realizas un "netstat -an | grep 3306" te aparece algo


Maxi.

El 27/07/06, Iñaki<i...@irontec.com> escribió:

Elio Rojano

unread,
Jul 27, 2006, 12:51:58 PM7/27/06
to aster...@googlegroups.com
A ver, lo primero es revisar lo básico:

 - El servidor mysql-server está funcionando?
    un `ps ax |grep mysql` debería bastarn

 - Es accesible por ese usuario?
    un `echo "use asterisk; SELECT * FROM sip;" |mysql -uasterisk -pXXXXXXX`
    deberia funcionar.

 - Asterisk hace el intento de conectarse?
    un `asterisk -gvvvvvvvc` debería mostrarte si intenta conectarse a la base de datos

 Si no conecta, puede ser también por no tener definido el puerto. (aunque diga que lo toma por defecto...)

De hecho, yo tengo comentado el campo 'sock' y descomentado el campo 'port'  en el res_mysql.conf y me funciona bien. (de hecho es el mismo archivo... ante la duda, enlace simbólico)

 - El log de mysql tienes que habilitarlo, si no, no mostrará nada.
 - El servidor mysql ha de estar en la misma máquina (ya que también habrá que habilitarlo para permitir conectarse desde otra IP que no sea la 127.0.0.1)
 
En principio, esto debería ser suficiente para que se conecte.

Cuéntanos algo...

Un saludo,

El día 27/07/06, Iñaki <i...@irontec.com> escribió:

ruben...@gmail.com

unread,
Jul 28, 2006, 2:51:34 AM7/28/06
to asterisk-es
vale la cuestion es que mysql al ser un servidor local de base de datos
usa directamente, tu tienes tu socket en /var/run/mysqld ?, yo lo tengo
aki:

dbhost = 127.0.0.1
dbname = asteriskrealtime
dbuser = root
dbpass = +++++
dbport = 3306
dbsock = /var/lib/mysql/mysql.sock

lo localice a mano, porque la direccion por defecto no me apuntaba bien
y me daba los mismos problemas que a ti, mira haber si te ayuda:

http://listas.inf.utfsm.cl/pipermail/linux/2005-August/022542.html

Suerte¡¡

Ruben Buron

Iñaki

unread,
Jul 28, 2006, 3:42:16 AM7/28/06
to aster...@googlegroups.com
El Jueves, 27 de Julio de 2006 18:31, Maximiliano J. Goldsmid escribió:
> Hola
>
> dos consultas:
> 1) Y desde el log de mysql que ves?

Tengo activada la opción
log = /var/log/mysql.log
en my.conf. Haciendo un tail me muestra cada consulta SQL.


> 2) si realizas un "netstat -an | grep 3306" te aparece algo

No, sencillamente no llega a conectarse a la base de datos, pero me parece
normal teniendo en cuenta que el error que posteo al final de mi correo
orginal, en el que entiendo que Asterisk no sabe los parámetros de conexión
(a pesar de estar indicados en res_mysql.conf y res_config_mysql.conf (por si
acaso).

Gracias por tu ayuda. Un saludo.

--
Iñaki Baz
Irontec: Internet y Sistemas sobre GNU/Linux
http://www.irontec.com
+0034 944416024

Iñaki

unread,
Jul 28, 2006, 4:09:28 AM7/28/06
to aster...@googlegroups.com
El Jueves, 27 de Julio de 2006 18:51, Elio Rojano escribió:
> A ver, lo primero es revisar lo básico:
>
> - El servidor mysql-server está funcionando?
> un `ps ax |grep mysql` debería bastarn

Funciona. Paralelamente hago consultas a la BD desde consola
u otras aplicaciones y lo veo en el log /var/log/mysql/messages.


> - Es accesible por ese usuario?
> un `echo "use asterisk; SELECT * FROM sip;" |mysql -uasterisk
> -pXXXXXXX` deberia funcionar.

Sí, de momento para hacer pruebas accedo directamente como root a la BD.


> - Asterisk hace el intento de conectarse?
> un `asterisk -gvvvvvvvc` debería mostrarte si intenta conectarse a la
> base de datos

[res_config_mysql.so] => (MySQL RealTime Configuration Driver)
== Parsing '/etc/asterisk/res_mysql.conf': Found
Jul 28 09:49:24 WARNING[26069]: res_config_mysql.c:544 parse_config: MySQL RealTime: No database port found, using 3306 as default.
Jul 28 09:49:24 WARNING[26069]: res_config_mysql.c:551 parse_config: MySQL RealTime: No database socket found, using '/tmp/mysql.sock' as default.
Jul 28 09:49:24 ERROR[26069]: res_config_mysql.c:615 mysql_reconnect: MySQL RealTime: Failed to connect database server asterisk on 127.0.0.1. Check debug for more info.
Jul 28 09:49:24 WARNING[26069]: res_config_mysql.c:450 load_module: MySQL RealTime: Couldn't establish connection. Check debug.
Jul 28 09:49:24 NOTICE[26069]: config.c:863 ast_config_engine_register: Registered Config Engine mysql
MySQL RealTime driver loaded.


> Si no conecta, puede ser también por no tener definido el puerto. (aunque
> diga que lo toma por defecto...)

El archivo /etc/asterisk/res_mysql.conf lo tengo así:

[general]
dbhost = 127.0.0.1
dbname = asterisk
dbuser = root
dbpass = ******


dbport = 3306
socket = /var/run/mysqld/mysqld.sock


Es curioso, he probado a quitar los parámetros "dbhost", "dbname", "dbuser" y "dbpass" y /var/log/mysql/messages me dice:

WARNING[26210] res_config_mysql.c: MySQL RealTime: No database user found, using 'asterisk' as default.
WARNING[26210] res_config_mysql.c: MySQL RealTime: No database password found, using 'asterisk' as default.
WARNING[26210] res_config_mysql.c: MySQL RealTime: No database host found, using localhost via socket.
WARNING[26210] res_config_mysql.c: MySQL RealTime: No database name found, using 'asterisk' as default.
WARNING[26210] res_config_mysql.c: MySQL RealTime: No database socket found, using '/tmp/mysql.sock' as default.
ERROR[26210] res_config_mysql.c: MySQL RealTime: Failed to connect database server asterisk on . Check debug for more info.
WARNING[26210] res_config_mysql.c: MySQL RealTime: Couldn't establish connection. Check debug.

Así que entonces es evidente que sí me está leyendo el fichero "res_mysql.conf",
sin embargo no capta bien los parámetros "dbport" y "socket", ya que si dejo el fichero
como arriba me dice (incluso si comento el "dbport" y habilito "socket"):

WARNING[26230] res_config_mysql.c: MySQL RealTime: No database socket found, using '/tmp/mysql.sock' as default.
ERROR[26230] res_config_mysql.c: MySQL RealTime: Failed to connect database server asterisk on 127.0.0.1. Check debug for more info.
WARNING[26230] res_config_mysql.c: MySQL RealTime: Couldn't establish connection. Check debug.


A mi entender el error debe estar por aquí, pero lo he revisado y hecho muchas pruebas.
Conclusión: Asterisk lee el fichero "res_mysql.conf", si omito parámetros en dicho
fichero da un WARNING, pero no lee bien los parámetros del socket/puerto o tal vez password
y no llega a conectarse.


> De hecho, yo tengo comentado el campo 'sock' y descomentado el campo 'port'
> en el res_mysql.conf y me funciona bien. (de hecho es el mismo archivo...
> ante la duda, enlace simbólico)

Perdona, ¿en realidad quieres decir "dbport" o sólo "port"? No obstante he probado con ambos con el mismo error.
¿Podrías pegarme tu "res_mysql.conf"? es para comprobar el nombre de los parámetros.


> - El log de mysql tienes que habilitarlo, si no, no mostrará nada.

Lo tengo habilitado. ;)


> - El servidor mysql ha de estar en la misma máquina (ya que también habrá
> que habilitarlo para permitir conectarse desde otra IP que no sea la
> 127.0.0.1)

Está en la misma máquina, la "dbhost = 127.0.0.1".


> En principio, esto debería ser suficiente para que se conecte.

Eso entiendo yo, y es lo que me preocupa, que "no quiere conectarse".


> Cuéntanos algo...
>
> Un saludo,

Muchas gracias por tu ayuda.

Saludos.

David Roman Esteban

unread,
Jul 28, 2006, 4:17:45 AM7/28/06
to aster...@googlegroups.com
Solución rápida y quizá un poco guarra:
1.- Permite al usuario asterisk conexión en la base de datos desde %
GRANT .....
2.- Pon el socket de mysql en /tmp/mysql.sock (que es donde lo esta
buscando asterisk) en el my.cnf

Un saludo
David

Elio Rojano

unread,
Jul 28, 2006, 5:12:51 AM7/28/06
to aster...@googlegroups.com
[general]
dbhost = 127.0.0.1
dbname = nbx
dbuser = root
dbpass = password
dbport = 3306
;dbsock = /tmp/mysql.sock

Con esto el mío se conecta.
Otra cosa que no había caído... la librería libmysqlclient es de la misma versión que el servidor mysql, ¿verdad? a ver si no se puede conectar por algún tipo de incompatibilidad de versión ( 4.0 != 4.1) o algo así... :)


El día 28/07/06, Iñaki <i...@irontec.com> escribió:

Iñaki

unread,
Jul 28, 2006, 5:17:11 AM7/28/06
to aster...@googlegroups.com
El Viernes, 28 de Julio de 2006 10:17, David Roman Esteban escribió:
> Solución rápida y quizá un poco guarra:
> 1.- Permite al usuario asterisk conexión en la base de datos desde %
> GRANT .....

De momento accedo como root.


He realizado pruebas incluso contra un MySQL en otra máquina (habilitando el
bind de mysql al exterior), y me da el mismo error.

Iñaki

unread,
Jul 28, 2006, 5:25:12 AM7/28/06
to aster...@googlegroups.com


He comprobado prácticamente fichero a fichero la instalación que pretendo con
otra instalación ya hecha (no por mí) con la misma Debian en la que funciona
bien el acceso a la BD.

Ambas instalaciones tienen idénticos ficheros my.conf,
paquete "libdbd-mysql-perl" instalado, asterisk-addons-1.2.3,
ficheros "res_mysql.conf", "sip.conf", "extconfig.conf" y "modules.conf"
similares... y no veo diferencia alguna.

La única diferencia es que en mi instalación he compilado Asterisk-1.2.10 y la
otra tiene compilada la versión "1.2.7.1-BRIstuffed-0.3.0-PRE-1p". ¿Alguien
sabe de algún problema con la 1.2.10 en relación a asterisk-addons o a mysql?


Gracias por vuestra ayuda.

Iñaki

unread,
Jul 28, 2006, 5:31:21 AM7/28/06
to aster...@googlegroups.com


Mi socket de mysql es "/var/run/mysqld/mysqld.sock".
No tengo ningún problema con la base de datos, tan sólo
accediendo desde Asterisk (que no llega a conectar).

Es cierto que aunque le paso el parámetro:
dbsock = /var/run/mysqld/mysqld.sock
(ó dbsocket = /var/run/mysqld/mysqld.sock)
Asterisk me dice:


res_config_mysql.c: MySQL RealTime: No database socket found, using '/tmp/mysql.sock' as default.

No entiendo porqué me dice eso. En un Asterisk 1.2.7 con igual "res_mysql.conf"
que el mío se conecta bien a mysql que escucha en /var/run/mysqld/mysqld.sock.

Gracias por tu ayuda.

Iñaki

unread,
Jul 28, 2006, 7:37:16 AM7/28/06
to aster...@googlegroups.com
Por fin, he encontrado el error. Resulta que Debian Sarge
incluye "localhost.localdomain" como primer nombre para 127.0.0.1
en /etc/hosts.

Y resulta que "root" sólo tiene permiso en MySQL con el dominio "localhost"
por lo que Asterisk no podía conectarse.

Curiosamente sí podía conectarme por consola "mysql -u root -p" pero no así
por telnet "telnet 127.0.0.1 3306".

La solución es:
- En plan chapucero: eliminar "localhost.localdomain" de /etc/hosts.
- Elegante: crear un usuario específico para Asterisk en MySQL.

Muchas gracias a todos por vuestra ayuda, de verdad. Un saludo.

Manuel Ángel Rubio Jiménez

unread,
Jul 28, 2006, 11:01:19 AM7/28/06
to aster...@googlegroups.com
Hola Iñaki,

El Viernes, 28 de Julio de 2006 11:31, Iñaki escribió:
> Asterisk me dice:
> res_config_mysql.c: MySQL RealTime: No database socket found, using
> '/tmp/mysql.sock' as default.

Si te fijas en tu configuración de "my.cnf", verás que cada cliente, servidor,
etc. tiene una entrada (que va entre corchetes), antes de todas las
configuraciones.

Prueba a poner dentro de my.cnf lo siguiente:

[asterisk]
socket=/var/run/mysqld/mysqld.sock

Un saludo.

--
Manuel A. Rubio "Bombadil"
Usuario de GNU/Linux #323628 acorde a http://counter.li.org/
GPG ID 1C84979D ftp://bosqueviejo.net/pub/bombadil.asc
Técnico en Admin. Sistemas Informáticos

Iñaki

unread,
Jul 28, 2006, 11:14:51 AM7/28/06
to aster...@googlegroups.com
El Viernes, 28 de Julio de 2006 17:01, Manuel Ángel Rubio Jiménez escribió:
> Hola Iñaki,
>
> El Viernes, 28 de Julio de 2006 11:31, Iñaki escribió:
> > Asterisk me dice:
> > res_config_mysql.c: MySQL RealTime: No database socket found, using
> > '/tmp/mysql.sock' as default.
>
> Si te fijas en tu configuración de "my.cnf", verás que cada cliente,
> servidor, etc. tiene una entrada (que va entre corchetes), antes de todas
> las configuraciones.
>
> Prueba a poner dentro de my.cnf lo siguiente:
>
> [asterisk]
> socket=/var/run/mysqld/mysqld.sock
>
> Un saludo.


Gracias Manuel, pero ya había arreglado el problema y enviado un correo
explicándolo. Resulta que era porque había puesto como usuario a root, y por
defecto en Debian Sarge "root" en MySQL tiene dominio "localhost" y como
en /etc/hosts viene primero "localhost.localdomain" MySQL denegaba el acceso.


Gracias no obstante por tu ayuda. Saludos.

Reply all
Reply to author
Forward
0 new messages