困扰我一下午的问题,现在终于明朗了。
我们都知道,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