【问题标题】:ODBC connection error:No such command "odbc show" ODBC connection fail in asterisk*CLIODBC 连接错误:星号*CLI 中没有这样的命令“odbc show”ODBC 连接失败
【发布时间】:2012-10-01 21:04:21
【问题描述】:

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

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

我做了什么:我在 VirtualBox 中安装了我的 AsteriskNow。 asterisk 的版本是 2.0,CentOS 的版本是 5.8 final。我首先通过

安装了相关的 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 数据库时,它工作正常

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

我在这里很困惑,不知道如何解决它。我用谷歌搜索,发现有人建议通过加载 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

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

【问题讨论】:

    标签: mysql linux odbc voip asterisk


    【解决方案1】:

    尝试执行以下操作:

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

    然后查看输出。

    【讨论】:

    • 没有。它无法卸载和加载模块。输出为“无法卸载资源 res_odbc.so” 'Command unload res_odbc.so' failed.
    • 是的,没关系,因为它没有加载。究竟是什么显示“负载”?
    • 当我执行“模块加载 res_odbc.so”时。它显示:无法卸载资源 res_odbc.so" '命令卸载 res_odbc.so
    【解决方案2】:

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

    (取决于您的 AsteriskNOW 安装是如何针对 packages.asterisk.org 存储库配置的,您可能需要 asterisk18-odbc 或类似的版本控制包。)

    如果您有res_odbc.so(签入/usr/lib/asterisk/modules 以获取此文件)但仍无法正确加载,则应查看/var/log/asterisk 中的Asterisk 日志以获取与res_odbc 相关的消息以获取更多信息。

    【讨论】:

    • 嗨,齐格。由于您的友善和有用的提示,我无法表达对您的感谢!在“sudo yum install asterisk-odbc”之后,我想我可以“模块加载 res_odbc.so”,它可以在 asterisk*CLI 中执行“odbc show”。如果您不介意,请留下您的电子邮件。我可能想用 Mysql 询问有关星号的问题。我的电子邮件是:ylai728@gmail.com 无论如何,非常感谢。我在这个问题上坚持了 3 多周...
    • 感谢您的支持、接受和信任投票;但我认为您可能想在其他地方寻求帮助,让 ODBC 或 MySQL 正常工作。我自己实际上并没有这样做。我只是熟悉 AsteriskNOW 的结构方式。
    【解决方案3】:

    请注意,当您使用 isql 命令时,您会收到一个错误(未知属性用户名)。

    试试这个 /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
    

    希望对你有所帮助。

    【讨论】:

    • 当我执行命令 ./configure 它返回 -bash:-./configure 没有这样的文件或目录。我需要在任何特定目录中使用此命令吗?
    • 你需要在星号源目录中使用它。在此之前,您必须下载并解压缩源代码。
    • 我很困惑,我不知道星号源目录。它是具有星号安装源文件的目录吗?因为我安装了asteriskNow,并且不需要在centOS中编译asterisk。下一步我该怎么做?
    • 谢谢大家!我想我发现了问题。:)
    【解决方案4】:

    你在做“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)。

    【讨论】:

      【解决方案5】:

      做

      sudo service asterisk restart
      

      像魅力一样工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-20
        相关资源
        最近更新 更多