ODBC连接错误:在asterisk * CLI中没有这样的命令“odbc show”ODBC连接失败

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

我的目标:以星号configurationODBC,以便直接和dynamic地从Asterisk的dialplan访问MySQL。

我做了什么:我在VirtualBox中安装了我的AsteriskNow。 星号的版本是2.0,CentOS版本5.8的最后。 我首先安装了相关的Linux RPMs

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

我的详细configuration文件如下:

/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中启动控制台时,input命令odbc show 。 它显示没有这样的命令“odbc show”

在这里输入图像说明

而我在这里混淆,不知道如何解决。 我GOOGLE了它,并find有人build议通过加载res_odbc.so模块解决它。 因此我通过modules.conf文件并将这些修改添加到文件中

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

修改后的完整文件如下“/ 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 

之后,我回到了CLI控制台重新加载res_odbc.so。 但它没能findres_odbc.so 在这里输入图像说明

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

在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 -rvvv module unload res_odbc.so module load res_odbc.so 

并看到输出。

请注意,当您使用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我不得不重新编译星号和执行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 

我希望能帮到你。

看起来你忘了添加一些重要的模块,当你“做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 )。

 sudo service asterisk restart 

奇迹般有效