1. 程式人生 > >當mysql中指定的socket路徑改變時如何通過ODBC進行訪問?

當mysql中指定的socket路徑改變時如何通過ODBC進行訪問?

困擾我一下午的問題,現在終於明朗了。

我們都知道,mysql安裝的時候客戶端和服務端連線的時候在預設的情況下都是通過/tmp/mysql.sock這個連結來完成的。但是由於我們為了改變資料庫的存放路徑,我們也改變了這個預設的路徑,可以通過my.cnf這個配置檔案來修改,具體的參見我的另外一篇博文。

但是在 在改了這個sock之後,我用odbc連的時候卻發現總是連不上,提示“[08S01][unixODBC][MySQL][ODBC 5.1 Driver]Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)”, 檢查驅動配置(odbcinst.ini)和unixODBC的dns的配置(odbc.ini)都正確,但是為什麼還是連不上呢?

google了半天,仍然沒發現什麼問題?簡直讓我抓狂!!!後來在一篇博文中偶然發現odbc.ini中有個socket選項,突然想到,這是不是指定mysql中的socket路徑呢?於是在odbc.ini中新增“Socket”選項,並指定socket的路徑。然後isql -v DSN名 使用者名稱  密碼(注意使用者名稱和密碼一個都不能少,否則拒絕登陸),成功了!這說明我的設想是正確的。

附上我的驅動配置和資料來源配置:

odbcinst.ini:

    # Example driver definitinions

#

#

# Included in the unixODBC package

[PostgreSQL]

Description     = ODBC for PostgreSQL

Driver          = /usr/lib/libodbcpsql.so

Setup           = /usr/lib/libodbcpsqlS.so

FileUsage       = 1

# Driver from the MyODBC package

# Setup from the unixODBC package

[MySQL]

Description     = ODBC for MySQL

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

Setup           = /usr/local/mysql/lib/libmyodbc3S.so

FileUsage       = 1

[SQLServer]

Description     = ODBC for SQLServer

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

Setup           = /usr/lib/libtdsS.so

FileUsage       = 1

odbc.ini:

[DongMSSQL]

Driver          = SQLServer

Description     = My First Test DSN

Trace           = No

Servername      = SQLSERVERTEST

Database        = master

User            = sa

Port            = 1433

[DongMySQL]

Driver          = MySQL

Description     = My First Test DSN

Trace           = No

Servername      = localhost

Database        = mysql

User            = root

Port            = 3306

Socket          = /home/data/mysql/mysql.sock