ODBC连接错误:在星号* CLI中没有此类命令“odbc show”ODBC连接失败

时间:2012-10-01 21:04:22

标签: mysql linux odbc voip asterisk

问题:我使用的是在VirtualBox中运行asterisk 2.0服务器的AsteriskNow。我想使用ODBC模块将Asterisk与MySQL数据库连接起来。但它失败了。当我开始使用asterisk * CLI> odbc show命令提示符显示“没有这样的命令ODBC SHOW”

我的目标:在星号中配置ODBC,直接动态地从Asterisk的拨号方案访问MySQL。

我做了什么:我在VirtualBox中安装了AsteriskNow。星号版本为2.0,CentOS版本为5.8。我首先通过

安装了相关的Linux RPM
yum -y install unixODBC-devel
yum -y install libdbi-dbd-mysql
yum -y install mysql-connector-odbc

我的详细配置文件如下:

/etc/odbc.ini

[asterisk-connector]
Description           = MySQL connection to 'asterisk' database
Driver                = MySQL
Database              = asterisk
Server                = localhost
UserName              = root        
Password              = mypassword
Port                  = 3306
Socket                = /var/lib/mysql/mysql.sock

/etc/odbcinst.ini

# Driver from the mysql-connector-odbc package
# Setup from the unixODBC-libs package
[MySQL]
Description = ODBC for MySQL
Driver      = /usr/lib/libmyodbc3_r.so
Setup       = /usr/lib/libodbcmyS.so
;Driver64   = /usr/lib64/libmyodbc3_r.so
;Setup64        = /usr/lib64/libodbcmyS.so
FileUsage   = 1

/etc/asterisk/res_odbc.conf

[asterisk]
enabled=>yes
dsn=>asterisk-connector
;dsn=>asterisk
username=>root
password=>mypassword
pooling=>no
limit=>0
pre-connect=>yes

当我使用“isql”命令连接MySQL数据库时,它工作正常 enter image description here

但是当我在CLI中启动控制台时,输入命令 odbc show 。它显示 No SUCH COMMAND“odbc show”

enter image description here

我在这里很困惑,不知道如何解决它。我用Google搜索并发现有人建议通过加载res_odbc.so模块来解决它。因此,我浏览了文件modules.conf并将这些修改添加到文件中

autoload=yes
preload => res_odbc.so
preload => res_config_odbc.so

修改后,完整文件如下“ 的/ etc /星号/模块

;
; Asterisk Module Loader configuration file
;
;

[modules]
autoload=yes
;
; Any modules that need to be loaded before the Asterisk core has been
; initialized (just after the logger has been initialized) can be loaded
; using 'preload'. This will frequently be needed if you wish to map all
; module configuration files into Realtime storage, since the Realtime
; driver will need to be loaded before the modules using those configuration
; files are initialized.
;
; An example of loading ODBC support would be:
preload => res_odbc.so
preload => res_config_odbc.so
;
; As FreePBX is using Local as the channel for queue members we need to make sure
; that pbx_config.so and chan_local.so are preloaded. If not, queue members
; will be marked as invalid until app_queue is reloaded. 
preload => pbx_config.so
preload => chan_local.so
;
; Uncomment the following if you wish to use the Speech Recognition API
;preload => res_speech.so
;
; If you want, load the GTK console right away.  
; KDE console is obsolete and was removed from Asterisk 2008-01-10
;
noload => pbx_gtkconsole.so
;load => pbx_gtkconsole.so
noload => pbx_kdeconsole.so
;
; Intercom application is obsoleted by
; chan_oss.  Don't load it.
;
noload => app_intercom.so
;
; DON'T load the chan_modem.so, as they are obsolete in * 1.2

noload => chan_modem.so
noload => chan_modem_aopen.so
noload => chan_modem_bestdata.so
noload => chan_modem_i4l.so

; Trunkisavail is a broken module supplied by Trixbox
noload => app_trunkisavail.so

; Ensure that format_* modules are loaded before res_musiconhold
;load => format_ogg_vorbis.so
load => format_wav.so
load => format_pcm.so

; format_au.so is removed from Asterisk 1.4 and later, remove ; to enable
;load => format_au.so

; This isn't part of 'Asterisk' iteslf, it's part of asterisk-addons. If this isn't
; installed, asterisk will fail to start. But it does need to go here for native MOH
; to work using mp3's. 
;   Note that on a system with a high number of calls, using a compressed audio format for
;   musiconhold takes CPU resources. Converting these files to ulaw/alaw makes the job
;   much easier for your CPU.
load => format_mp3.so
load => res_musiconhold.so
;
; Load either OSS or ALSA, not both
; By default, load no console driver
;
noload => chan_alsa.so
noload => chan_oss.so
;
noload => app_directory_odbcstorage.so 
noload => app_voicemail_odbcstorage.so 

完成此操作后,我返回CLI控制台重新加载res_odbc.so。但它未能找到res_odbc.so enter image description here

我需要有人给我提示解决ODBC连接问题。

5 个答案:

答案 0 :(得分:3)

尝试做下面的事情:

asterisk -rvvv
module unload res_odbc.so
module load res_odbc.so

看看输出。

答案 1 :(得分:2)

在AsteriskNOW环境中,要获取res_odbc.so,即为Asterisk提供ODBC资源的模块,您需要安装asterisk-odbc软件包。

(根据您针对packages.asterisk.org存储库配置AsteriskNOW的方式,您可能需要asterisk18-odbc或类似的版本化软件包。)

如果你有res_odbc.so(在这个文件中检查/usr/lib/asterisk/modules)但仍未正确加载,则应检查/var/log/asterisk中的星号日志,查找与{{1}相关的消息有关更多信息。

答案 2 :(得分:0)

请注意,使用isql命令时会收到错误(未知属性UserName)。

尝试使用此/etc/odbc.ini文件:

[asterisk-connector]
Description = MySQL connection to 'asterisk' database
Driver      = MySQL
DATABASE    = asterisk
SERVER      = localhost
USER        = root
PASSWORD    = mypassword
PORT        = 3306
Option      = 3

我不知道是否对CentOS有效但在Debian中我必须重新编译Asterisk并执行menuselect才能工作。为此,请转到Asterisk字体目录:

$ ./configure

$ make clean

$ make menuselect

请确认已选中以下模块:

[*] cdr_odbc

[*] cdr_adaptive_odbc

[*] func_odbc

[*] func_realtime

[*] pbx_realtime

[*] res_config_odbc

[*] res_odbc

然后:

$ sudo make install

我希望能帮到你。

答案 3 :(得分:0)

当您执行“make menuselect”检查时,您似乎忘记添加一些重要的模块。

此外,如果您使用mysql作为关系数据库,则必须在您描述的配置文件(/etc/asterisk/res_odbc.conf)中建立“limit => 1”非常重要。只需注释该行。如果您正在关注orreilly指南(http://ofps.oreilly.com/titles/9781449332426/asterisk-DB.html),您可以看到勘误表(http://oreilly.com/catalog/errata.csp?isbn=9780596517342)。

答案 4 :(得分:0)

sudo service asterisk restart

像魅力一样工作