在Linux安装配置unixODBC


类型:LinuxApp,创建时间:Jan. 1, 2012, 12:16 p.m.

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/43/。

ODBC是一种数据库标准。下面是维基百科对ODBC的介绍:

ODBC(Open Database Connectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问DBMS(Database Management System)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC的设计者们努力使它具有最大的独立性和开放性:与具体的编程语言无关,与具体的数据库系统无关,与具体的操作系统无关。微软公司在1993年以DLL集的方式发布了世界上第一个ODBC产品,现在成为了微软开放服务结构(WOSA,Windows Open Services Architecture)中,有关数据库的一个组成部分。微软的ODBC产品其实就是一个ODBC的驱动管理器,提供一个ODBC应用程序到某种ODBC驱动的接口。在UNIX系统上,有两个开源的ODBC驱动管理器,unixODBC和iODBC。

如果有Windows下开发数据库应用程序的经验,应该稍微知道Windows下的ADO或者DAO使用数据库系统的方法。这是一段在ASP下使用ADO的例子:

Dim conn,rs
Set conn = Server.Createobject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
conn.Open "DSN=mytest;"
rs.Open "select * from testtable", conn, 1, 1

Do While Not rs.EOF
    MsgBox rs("field1")
    rs.MoveNext
Loop

rs.Close
conn.Close

ODBC使用DSN保存连接到数据库系统的信息。在使用之前,ODBC程序需要打开到DSN的连接。ODBC的DSN分为四类——系统DSN、用户DSN、文件DSN,或许还包括Connection.Open语句临时创建的DSN。在UNIXODBC里,在/etc/odbc.ini里保存着系统DSN,而在~/.odbc.ini里保存着用户DSN。通常,向外提供服务的程序使用系统DSN。

接下来我们要配置一个DSN供ODBC存储CDR记录。首先在MySQL中创建一个数据库,MySQL的安装方法请参考《Ubuntu下MySQL的安装以及简单配置》:

$ mysql -u root -p
mysql> create database asterisk default charset 'utf8';
mysql> exit;
$

接下来是安装与配置UNIXODBC。因为我们使用MySQL服务器,还要注意安装MySQL的ODBC驱动程序。

sudo apt-get install unixodbc libmyodbc

UNIXODBC的配置文件主要是/etc/odbcinst.ini以及/etc/odbc.ini。前者用于配置驱动程序,后者,正如上文所述,用于保存系统DSN。刚才安装了MySQL的驱动程序,需要把它的配置信息填写到/etc/odbcinst.ini内。现在打开你所喜爱的编辑器(我最喜欢的是nano :-),编辑/etc/odbcinst.ini

[MySQL]
Description = MySQL driver for Linux
Driver      = /usr/lib/odbc/libmyodbc.so
Setup       = /usr/lib/odbc/libodbcmyS.so
FileUsage   = 1

配置信息依次是驱动程序描述、驱动程序位置、配置程序位置、驱动程序使用次数。实际的驱动程序位置依Linux发行版的不同而有所差异。Ubuntu通常位于/usr/lib/odbc/下。Suse位于/usr/lib/unixODBC/。RedHat等发行版可能有所不同。

然后是配置DSN,接下来我们创建一个名为AsteriskDB的DSN。编辑/etc/odbc.ini文件

[AsteriskDB]
Description = The Database for Asterisk
Trace       = On
TraceFile   = stderr
Driver      = MySQL
SERVER      = localhost
USER        = root
PASSWORD    = mypassword
PORT        = 3306
DATABASE    = asterisk

在配置文件里,DSN的名字即为Section的名字。在配置信息中,有一部分配置项是ODBC使用的,另一部分则由驱动程序处理。下面几个是由ODBC使用的配置项:

Description 描述信息 Trace 是否跟踪SQL语句。有“On”和“Off”两种值 TraceFile 如果跟踪SQL语句。将跟踪信息保存到何文件中。如果填写stderr就会打印到标准输出 Driver 在/etc/odbcinst.ini里配置的驱动程序名字。

配置文件里的SERVERUSER等信息是MySQL驱动程序使用的信息。这里有一些示例,包含了各种SQL服务器的配置:

[PostgreSQL]
Description         = Test to Postgres
Driver              = PostgreSQL
Trace               = Yes
TraceFile           = sql.log
Database            = nick
Servername          = localhost
UserName            =
Password            =
Port                = 5432
Protocol            = 6.4
ReadOnly            = No
RowVersioning       = No
ShowSystemTables    = No
ShowOidColumn       = No
FakeOidIndex        = No
ConnSettings        =

[Mini SQL]
Description         = MiniSQL
Driver              = MiniSQL
Trace               = No
TraceFile           =
Host                = localhost
Database            =
ConfigFile          =

[MySQL-test]
Description         = MySQL test database
Trace               = Off
TraceFile           = stderr
Driver              = MySQL
SERVER              = 192.168.1.26
USER                = pharvey
PASSWORD            =
PORT                = 3306
DATABASE            = test

[nntp Data Source]
Description         = nntp Driver
Driver              = nntp Driver
Trace               = No
TraceFile           =
Host                = localhost
Database            =
Port                =

[FreeTDS driver]
Driver              = TDS
Description         = Northwind sample database
Trace               = No
Server              = 192.168.1.25
Database            = Northwind
UID                 = sa

[Sybase SQL Anywhere 5.0]
Driver              = Sybase SQL Anywhere 5.0
Description         = Sybase SQL Anywhere 5.0 ODBC Driver
Userid              = dba
Password            = sql
DatabaseFile        = sademo.db

如果操作完全正确的话,现在ODBC已经成功了。可以试下isql命令操作刚配置的DSN。

$ isql asteriskdb
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> show tables;
+-----------------------------------------------------------------+
| Tables_in_asterisk                                              |
+-----------------------------------------------------------------+
+-----------------------------------------------------------------+
SQLRowCount returns 0
SQL>

这个命令行界面与mysql命令类似,可以进行各种数据库操作。至此,UNIXODBC已经安装成功了。

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/43/。


暂时还没有任何评论。


何不来发表一下您对本文的看法(使用Markdown语法,分段空两行):