Nsodbc

From AOLserver Wiki
Revision as of 11:13, 26 April 2004 by WikiSysop (talk | contribs) (imported from WiKit id 136)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

nsodbc is an internal DB driver for AOLserver that enables you to connect to databases that have an ODBC driver using an ODBC manager and the nsodbc module.

Dossy: I have gotten AOLserver 4.x on Debian Linux (sid) to work with nsodbc connecting to MySQL using unixODBC as the ODBC manager and MyODBC as the ODBC driver. Specific versions of interest for folks looking to do similar:

  • Linux ecwav 2.4.20 #1 Sat May 24 08:47:33 EDT 2003 i686 GNU/Linux [1]
  • AOLserver 4.1.0 (CVS HEAD as of 14mar2004) [2]
  • nsodbc (CVS HEAD as of 14mar2004) [3]
  • unixODBC 2.2.8 [4]
  • MyODBC 3.51.06 [5]
  • MySQL 3.23.49 [6]

The nsodbc module requires minor changes (which should be committed to CVS soon) but until then, the patch is available here:


Specifically, here's how I built unixODBC and MyODBC and nsodbc:

unixODBC

 $ ./configure --prefix=/usr

MyODBC

 $ ./configure --prefix=/usr --enable-thread-safe --with-unixODBC=/usr --with-debug \
     --with-mysql-libs=/usr/lib --with-mysql-includes=/usr/include/mysql \
     --with-odbc-ini=/usr/etc/odbc.ini

nsodbc

 $ make ODBC=/usr/lib

Here are what my configuration files look like:

/usr/etc/odbcinst.ini

 ODBC
 Trace           = off
 TraceFile       = /tmp/sql.log
 
 myodbc
 Description     = MySQL ODBC 2.50 Driver DSN
 Driver          = /usr/lib/libmyodbc.so
 Setup           = /usr/lib/libodbcmyS.so
 FileUsage       = 1
 
 myodbc3
 Description     = MySQL ODBC 3.51 Driver
 Driver          = /usr/lib/libmyodbc3.so
 Setup           = /usr/lib/libodbcmyS.so
 FileUsage       = 1

/usr/etc/odbc.ini

 ODBC Data Sources
 MySQL-test=MySQL test database
 
 MySQL-test
 Description = MySQL test database
 Trace       = off
 TraceFile   = /tmp/sql.log
 Driver      = myodbc3
 Server      = 127.0.0.1
 Port        = 3306
 User        = dossy
 Password    = 
 Database    = dossy
 Option      = 3
 Socket      = 
 

[ N.B.: I really DID leave the Password field blank in the odbc.ini. Also, if you specify Server as "localhost" and Socket as empty, it still tries to connect using the Unix socket based off the default in libmysqlclient instead of via TCP. The only way I could get it to do TCP was to specify Server as an IP address and not a hostname. I probably spent two hours trying to figure out why it refused to connect via TCP until I discovered this. ]

init.tcl (only the relevant excerpt here)

 ns_section "ns/db/drivers"
 ns_param odbc         nsodbc.so
 ns_section "ns/db/pools"
 ns_param dossyodbcdb    "Dossy's MySQL-test ODBC pool"
 ns_section "ns/db/pool/dossyodbcdb"
 ns_param driver       odbc
 ns_param connections  1
 ns_param user         dossy
 ns_param password     $password
 ns_param datasource   MySQL-test
 ns_param logsqlerrors on
 ns_param verbose      on