當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