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
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ó:
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
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
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.
Un saludo
David
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.
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.
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.
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.
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
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.