Linux下Mysql的odbc配置


安裝配置之前,需要先大概了解一下MyODBC的架構. MyODBC體系結構建立在5個組件上,如下圖所示:

 

 

Driver Manager:

 

負責管理應用程序和驅動程序間的通信,主要功能包括:解析DSN (數據源名稱,ODBC的數據源名稱在ODBC.INI文件中配置),加載和卸載驅動程序,處理ODBC調用,將其傳遞給驅動程序.

 

Connector/ODBC(MyODBC驅動程序):

 

實現ODBC API所提供的功能,它負責處理ODBC函數調用,將SQL請求提交給MySQL服務器,並將結果返回給應用程序.

 

ODBC.INI

ODBC.INI是ODBC配置文件,記錄了連接到服務器所需的驅動信息和數據庫信息。Driver Manager將使用它來確定加載哪個驅動程序(使用數據源名DSN)。驅動程序將根據指定的DSN來讀取連接參數。

 

在Linux下配置mysql ODBC需要有以下步驟:

1.     安裝Driver Manager ,本案例使用unixODBC來作為Driver Manager.

2.      安裝MySQL驅動程序,本案例使用Connector/ODBC.

3.      配置ODBC.INI

 

 

第一步:下載安裝包.

 

需要下載兩個安裝包unixODBC 2.3.0和mysql Connector/ODBC 3.51

unixODBC源碼包:ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.0.tar.gz

 

第二步

http://dev.mysql.com/downloads/connector/odbc/3.51.html%23downloads

選擇

版本:5.1.11

平台:Oracle&Red Hat Linux6

下載:mysql-connector-odbc-5.1.11-linux-el6-x86-64bit.tar.gz

 

 

第二步:安裝unixODBC

 

tar -zxvf unixODBC-2.3.4.tar.gz

cd unixODBC-2.3.4

./configure --prefix=/usr/local/unixODBC-2.3.4 --includedir=/usr/include --libdir=/usr/local/lib -bindir=/usr/bin --sysconfdir=/usr/local/etc

make

make install

 

安裝完成后,可以在/usr/bin目錄下有下面的文件

-rwxr-xr-x 1 root root      75312 Nov 1 16:22 odbcinst

-rwxr-xr-x 1 root root      10922 Nov 1 16:22 odbc_config

-rwxr-xr-x 1 root root      37650 Nov 1 16:22 iusql

-rwxr-xr-x 1 root root      44400 Nov 1 16:22 isql

-rwxr-xr-x 1 root root      95903 Nov 1 16:22 dltest

 

在/usr/local/lib目錄下面有這些文件

 

-rwxr-xr-x 1 root root 422955 Nov 1 16:22 libodbcinst.so.1.0.0

lrwxrwxrwx 1 root root     20 Nov 1 16:22 libodbcinst.so.1 -> libodbcinst.so.1.0.0

lrwxrwxrwx 1 root root     20 Nov 1 16:22 libodbcinst.so -> libodbcinst.so.1.0.0

-rwxr-xr-x 1 root root    981 Nov 1 16:22 libodbcinst.la

-rwxr-xr-x 1 root root 1691572 Nov 1 16:22 libodbc.so.1.0.0

lrwxrwxrwx 1 root root     16 Nov 1 16:22 libodbc.so.1 -> libodbc.so.1.0.0

lrwxrwxrwx 1 root root     16 Nov 1 16:22 libodbc.so -> libodbc.so.1.0.0

-rwxr-xr-x 1 root root    957 Nov 1 16:22 libodbc.la

-rwxr-xr-x 1 root root 489405 Nov 1 16:22 libodbccr.so.1.0.0

lrwxrwxrwx 1 root root     18 Nov 1 16:22 libodbccr.so.1 -> libodbccr.so.1.0.0

lrwxrwxrwx 1 root root     18 Nov 1 16:22 libodbccr.so -> libodbccr.so.1.0.0

-rwxr-xr-x 1 root root    969 Nov 1 16:22 libodbccr.la

 

 

第三步:安裝mysql Connector/ODBC

 (odbc 5.3及以上是libmyodbc5a.so和libmyodbc5w.so。其中c5a是Ansi版,c5w是Unicode版)

tar -zxvf mysql-connector-odbc-5.1.11-linux-el6-x86-64bit.tar.gz

cd mysql-connector-odbc-5.1.11-linux-el6-x86-64bit/lib

cp  libmyodbc5.so  /usr/local/lib

cd ..

cd bin

1、注冊驅動

./myodbc-installer  -d -a -n "MySQL ODBC 5.1 Driver"  -t "DRIVER=/usr/local/lib/libmyodbc5.so;SETUP=/usr/local/lib/libmyodbc5.so"

 

假如注冊的時候報錯找不到libodbc.so.2,但是之前確實裝成功了unixodbc,可能是因為系統找不到/usr/local/lib庫目錄,需要添加系統搜索庫目錄路徑:

#將/usr/local/lib直接添加在配置文件里
vi /etc/ld.so.conf
#重新緩存配置文件(為了加快程序執行時對共享庫的定位速度,避免使用搜索路徑查找共享庫的低效率,所以是直接讀取庫列表文件/etc/ld.so.cache緩存文件並從中進行搜索的)
ldconfig 

 

第四步:配置ODBC.INI:

 

編輯文件/usr/local/etc/odbc.ini,把下面的內容加上去.需要注意一下,不同版本mysql驅動的配置方法,有細微差異. 本案例使用的版本是mysql Connector 3.51

 

[mysqlDSN]

Driver      = /usr/local/lib/libmyodbc5.so

Description = MyODBC 5 Driver DSN

SERVER      = 172.31.108.133

PORT        = 3306

USER        = root

Password    = 123456

Database    = PM

OPTION      = 3

charset=UTF8

 

第五步:設置環境變量

 

export DBCINI=/usr/local/etc/odbc.ini

export DBCSYSINI=/usr/local/etc

第六步:重啟電腦

reboot

第七步:測試ODBC配置是否成功

 

Isql是unixODBC帶的一個ODBC客戶端訪問工具,使用isql +數據源名來訪問目標數據庫.

如果ODBC配置正確,會顯示下面的界面.在SQL>提示符下輸入SQL語句查詢數據庫.

 

# isql mysqlDSN

+---------------------------------------+

| Connected!                           |

|                                      |

| sql-statement                        |

| help [tablename]                     |

| quit                                 |

|                                      |

+---------------------------------------+

 

遇到的問題:

在第三步安裝mysql connector/ODBC中的注冊驅動中,我總是會出現./myodbc-installer: error while loading shared libraries: libodbc.so.2: cannot open shared object file: No such file or directory.這種錯誤,后來發現錯誤有兩點:

1)我下載的是mysql-connector-5.3.6,可能版本比較高,而我初次下載用的是unixODBC-2.3.0,版本較低,里面沒有libodbc.so.2這個庫文件(可以用find / -name libodbc.so.2來查)。后來下載了一個unixODBC-2.3.4就好了。

2)改了版本之后,我發現還是有這個錯誤,在網上查了下,說是程序查找默認路徑為/lib和/usr/lib,而我的libmyodbc5w.so和libmmyodbc5a.so都在/usr/local/lib中,所以查不到,所以需要設置一下共享庫路徑,以下我貼一下網上查的內容:

一般我們在Linux下執行某些外部程序的時候可能會提示找不到共享庫的錯誤, 比如:

tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory

原因一般有兩個, 一個是操作系統里確實沒有包含該共享庫(lib*.so.*文件)或者共享庫版本不對, 遇到這種情況那就去網上下載並安裝上即可. 

另外一個原因就是已經安裝了該共享庫, 但執行需要調用該共享庫的程序的時候, 程序按照默認共享庫路徑找不到該共享庫文件. 

所以安裝共享庫后要注意共享庫路徑設置問題, 如下:

1) 如果共享庫文件安裝到了/lib或/usr/lib目錄下, 那么需執行一下ldconfig命令

ldconfig命令的用途, 主要是在默認搜尋目錄(/lib和/usr/lib)以及動態庫配置文件/etc/ld.so.conf內所列的目錄下, 搜索出可共享的動態鏈接庫(格式如lib*.so*), 進而創建出動態裝入程序(ld.so)所需的連接和緩存文件. 緩存文件默認為/etc/ld.so.cache, 此文件保存已排好序的動態鏈接庫名字列表. 

2) 如果共享庫文件安裝到了/usr/local/lib(很多開源的共享庫都會安裝到該目錄下)或其它"非/lib或/usr/lib"目錄下, 那么在執行ldconfig命令前, 還要把新共享庫目錄加入到共享庫配置文件/etc/ld.so.conf中, 如下:

# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig

3) 如果共享庫文件安裝到了其它"非/lib或/usr/lib" 目錄下,  但是又不想在/etc/ld.so.conf中加路徑(或者是沒有權限加路徑). 那可以export一個全局變量LD_LIBRARY_PATH, 然后運行程序的時候就會去這個目錄中找共享庫. 

LD_LIBRARY_PATH的意思是告訴loader在哪些目錄中可以找到共享庫. 可以設置多個搜索目錄, 這些目錄之間用冒號分隔開. 比如安裝了一個mysql到/usr/local/mysql目錄下, 其中有一大堆庫文件在/usr/local/mysql/lib下面, 則可以在.bashrc或.bash_profile或shell里加入以下語句即可:

export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH    

一般來講這只是一種臨時的解決方案, 在沒有權限或臨時需要的時候使用.

4)如果程序需要的庫文件比系統目前存在的村文件版本低,可以做一個鏈接
比如:
error while loading shared libraries: libncurses.so.4: cannot open shared
object file: No such file or directory

ls /usr/lib/libncu*
/usr/lib/libncurses.a   /usr/lib/libncurses.so.5
/usr/lib/libncurses.so  /usr/lib/libncurses.so.5.3

可見雖然沒有libncurses.so.4,但有libncurses.so.5,是可以向下兼容的
建一個鏈接就好了
ln -s  /usr/lib/libncurses.so.5.3  /usr/lib/libncurses.so.4

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM