无法使用 unixodbc、libmyodbc 连接到远程 mysql 服务器

Posted

技术标签:

【中文标题】无法使用 unixodbc、libmyodbc 连接到远程 mysql 服务器【英文标题】:Unable to connect to remote mysql server using unixodbc, libmyodbc 【发布时间】:2014-02-24 18:30:08 【问题描述】:

我对此有点不满意,我希望我遇到的问题是一个简单的问题...编辑:底部的新信息

我需要连接到远程 mysql (Amazon RDS) 数据库。

在学习了一些教程之后,我在客户端上安装和配置了 unixodbc 和 libmyodbc,但是当我尝试通过 isql 连接时,我得到了错误

[08S01][unixODBC][MySQL][ODBC 5.1 Driver]Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[ISQL]ERROR: Could not SQLConnect

关于这个错误最令人困惑的部分是我没有尝试连接到本地数据库,而是连接到远程数据库。我在客户端上没有 mysql.sock 文件……但这不是问题吗?

我感觉到配置错误,但我不确定它可能是什么。

如果我运行 odbcinst -j 那么输出是:

DRIVERS............: /etc/unixODBC/odbcinst.ini
SYSTEM DATA SOURCES: /etc/unixODBC/odbc.ini
USER DATA SOURCES..: /root/.odbc.ini

/etc/unixODBC/odbcinst.ini 的内容是:

[MySQL]
Description             = ODBC for MySQL
Driver          = /usr/lib64/libmyodbc5.so
Setup           = /usr/lib64/unixODBC/libodbcmyS.so
UsageCount              = 5

[MySQL ODBC 515 Driver]
Description             = ODBC 5.515 for MySQL
DRIVER          = /usr/lib64/libmyodbc5-5.1.5.so
SETUP           = /usr/lib64/unixODBC/libodbcmyS.so
UsageCount              = 3

请注意,这个配置是我自己编的,我找了libmyodbc*,找到了这两个.so文件,因此为每个文件设置了一个驱动程序。搜索 libodbcmyS* 得到:

/usr/lib64/unixODBC/libodbcmyS.so.1
/usr/lib64/unixODBC/libodbcmyS.so
/usr/lib64/unixODBC/libodbcmyS.so.1.0.0

所以,我不知道该配置还能是什么。

/etc/unixODBC/odbc.ini 的内容是:

[target_db]
Driver          = MySQL
Server          = [servername.com]
Port            = 3306
Database        = [databasename]
Option          = 2
User            = [username]
Password        = [password]

我在“驱动程序”中尝试了不同的选项,将其从 MySQL 更改为 MySQL ODBC 515 驱动程序,更改为 .so 文件的路径(例如:/usr/lib64/libmyodbc5.so)并且所有的结果都相同结果。

我在跑步:

odbcinst -i -d -f /etc/unixODBC/odbcinst.ini

后跟:

odbcinst -i -s -l -f /etc/unixODBC/odbc.ini

接着是:

odbcinst -s -q

打印出我的连接名称,即[target_db]

然后,我尝试连接:

isql -v target_db user password

或者只是

isql -v target_db

并得到如上所示的错误。

有人碰巧知道我在这里做错了什么吗?非常感谢-

编辑:

想提一下,我可以使用 mysql 命令行工具从该服务器连接到数据库。

我安装了一个本地 mysql 数据库,并且可以使用 isql 连接到该数据库。它似乎完全忽略了我的 odbc.ini 文件,我必须在命令中输入一个名称,即 isql -v test-database,但尽管我进行了设置,它仍会尝试连接到 localhost。

我觉得好像我已经尝试了所有方法,但会坚持下去,如果我找到解决方案,我会发布。

【问题讨论】:

我也看到了同样的问题,不过只在 SLES 11.3 上,CentOS 6.4 没问题。 【参考方案1】:

您可以尝试使用您的服务器的 ip 而不是 odbc.ini 的“服务器”行上的 dns 条目进行连接。您是否验证了驱动程序已使用 phpinfo() 安装?

【讨论】:

这也是我的第一个想法,但我在 SLES 11.3 上看到了同样的问题(CentOS 6.4 工作正常),但它不起作用。【参考方案2】:

尝试使用您的 odbc.ini 文件的路径设置环境变量 ODBCINI

请记住,您指向的 odbc.ini 文件必须是运行程序的用户“可写访问”的(即用户必须有权写入此文件)。

【讨论】:

【参考方案3】:

chmod g+w .odbc.ini 为我做了这件事,因为我们使用 ORACLE-Start 运行数据库并且 crs-User 似乎负责

【讨论】:

以上是关于无法使用 unixodbc、libmyodbc 连接到远程 mysql 服务器的主要内容,如果未能解决你的问题,请参考以下文章

无法在 linux 机器上通过 ODBC 连接到 informix

CakePHP 和使用 Unixodbc 连接到 MS Access db

无法通过 turbodbc 连接到数据库

在 Azure 应用服务上为 Flask Web 应用安装 unixodbc-dev

在AIX上配置unixODBC - 驱动程序管理器无法打开lib

unixodbc 和 netezza ODBC 驱动程序问题(未定义符号:SSL_connect)