ODBC是一种数据库标准。下面是维基百科对ODBC的介绍:
“ODBC(Open Database Connectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问DBMS(Database ManagementSystem)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC的设计者们努力使它具有最大的独立性和开放性:与具体的编程语言无关,与具体的数据库系统无关,与具体的操作系统无关。微软公司在1993年以DLL集的方式发布了世界上第一个ODBC产品,现在成为了微软开放服务结构(WOSA,Windows Open Services Architecture)中,有关数据库的一个组成部分。微软的ODBC产品其实就是一个ODBC的驱动管理器,提供一个ODBC应用程序到某种ODBC驱动的接口。在UNIX系统上,有两个开源的ODBC驱动管理器,unixODBC和iODBC。 ”
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中创建一个数据库,接下来是安装与配置UNIXODBC。因为我们使用MySQL服务器,还要注意安装MySQL的ODBC驱动程序。
sudo apt-get install unixodbc libmyodbc
UNIXODBC的配置文件主要是/etc/odbcinst.ini以及/etc/odbc.ini。前者用于配置驱动程序,后者,正如上文所述,用于保存系统DSN。刚才安装了MySQL的驱动程序,需要把它的配置信息填写到 vi /etc/odbcinst.ini内。现在打开你所喜爱的编辑器,编辑 vi /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里配置的驱动程序名字。
配置文件里的“SERVER”、“USER”等信息是MySQL驱动程序使用的信息。这里有一些示例:
[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已经安装成功了。