ODBC connection error:No such command “odbc show” ODBC connection fail in asterisk*CLI

限于喜欢 提交于 2019-12-08 05:19:00

问题


Problems: I am using AsteriskNow which running asterisk 2.0 server in VirtualBox. And i want to connect Asterisk with MySQL databases using ODBC modules. But it fails. When i started with asterisk*CLI> odbc show The command prompt shows that "No such command ODBC SHOW"

My Objectives: configure ODBC in asterisk to access MySQL from Asterisk's dialplan directly and dynamically.

What i did: I installed my AsteriskNow in VirtualBox. The version of asterisk is 2.0, the CentOS version 5.8 final. I firstly installed related Linux RPMs by

yum -y install unixODBC-devel
yum -y install libdbi-dbd-mysql
yum -y install mysql-connector-odbc

My detail configured files are as follows:

/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

When i used "isql" command to connect MySQL databases, it works fine

But when i started the console in CLI, input command odbc show . it shows No SUCH COMMAND "odbc show "

And i am confusing here, and do not know how to solve it. I googled it and find someone recommend to solve it by having the res_odbc.so module loaded. Thus i went through the file modules.conf and add those modification into files

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

After being modified, the complete file is as follow" /etc/asterisk/modules

;
; 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 

After did this, i went back the CLI console to reload the res_odbc.so. But it failed to find the res_odbc.so

I need someone give me hints on solving the ODBC connections problems.


回答1:


In the AsteriskNOW environment, to get res_odbc.so, which is the module that provides the ODBC resource to Asterisk, you need to have the asterisk-odbc package installed.

(Depending on how your AsteriskNOW installation is configured with respect to the packages.asterisk.org repositories, you may need asterisk18-odbc or a similar versioned package instead.)

If you have res_odbc.so (check in /usr/lib/asterisk/modules for this file) and it is still not loading correctly, you should check the Asterisk logs in /var/log/asterisk for messages relating to res_odbc for more information.




回答2:


Try do follwoing:

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

And see output.




回答3:


Note that when you use the isql command you receive an error (Unknown attribute UserName).

Try with this /etc/odbc.ini file:

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

I dont known if is valid for CentOS but in Debian I had to recompile Asterisk and execute menuselect in order to work. To do that, go to your Asterisk fonts directory:

$ ./configure

$ make clean

$ make menuselect

Please verify that the following modules are checked:

[*] cdr_odbc

[*] cdr_adaptive_odbc

[*] func_odbc

[*] func_realtime

[*] pbx_realtime

[*] res_config_odbc

[*] res_odbc

and then:

$ sudo make install

I hope that help you.




回答4:


It seems that you forget to add some important module when you do "make menuselect" check it.

Besides and it is very important you must establish "limit=>1" in the configuration file that you describe (/etc/asterisk/res_odbc.conf) if your are using mysql as relational database o just comment the line. If you are following the orreilly guide (http://ofps.oreilly.com/titles/9781449332426/asterisk-DB.html) you can see the errata (http://oreilly.com/catalog/errata.csp?isbn=9780596517342).




回答5:


Do

sudo service asterisk restart

Works like a charm



来源:https://stackoverflow.com/questions/12681048/odbc-connection-errorno-such-command-odbc-show-odbc-connection-fail-in-asteri

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!