在 Mac OS X 上使用 R 访问 MySQL 数据库

Posted

技术标签:

【中文标题】在 Mac OS X 上使用 R 访问 MySQL 数据库【英文标题】:Access MySQL database in R on Mac OS X 【发布时间】:2016-09-28 15:25:20 【问题描述】:

我在 mac (Mac OS X 10.11.2) 上从 R 访问我的 mysql 数据库时遇到问题。以下代码:

library("RODBC")
mycom  <- odbcConnect("wsn_mysql_5", uid="root", pwd="*****")

给出这个错误:

1: In RODBC::odbcDriverConnect("DSN=wsn_mysql_5;UID=root;PWD=****") :
[RODBC] ERROR: state 00000, code 15509574, message 
[iODBC][DriverManager]dlopen(/usr/local/lib/libmyodbc5a.so, 
6): no suitable image found.  Did find:
/usr/local/lib/libmyodbc5a.so: mach-o, but wrong architecture
2: In RODBC::odbcDriverConnect("DSN=wsn_mysql_5;UID=root;PWD=****") :
[RODBC] ERROR: state IM003, code 15509574, message 
[iODBC][Driver Manager]Specified driver could not be loaded

到目前为止我所尝试的:

    我安装了 iODBC 驱动管理器 3.52.12。 我安装了 MySQL 连接器 odbc-5.3.6-osx10.11-x86-64bit 并创建了一个 DSN(服务器=localhost,用户=root,密码=*****,数据库=wsn_db)。

我在 iODBC Administrator 中测试时遇到此错误:

[iODBC][Driver manager]dlopen(/usr/local/lib/libmyodbc5w.so, 6): no suitable image found. 
Did find: /usr/local/lib/libmyodbc5w.so: mach -o, but wrong architecture. 

How to add ODBC to MAMP on OSX 让我认为这是 32 位与 64 位的问题。

    所以我安装了 MySQL 连接器 odbc-5.2.7-osx10.7-x86-32bit,这是我找到的最新 32 位版本。当我使用 iODBC Administrator 进行测试时,它似乎可以工作,但是当我尝试 R 中的代码时,我得到了开头提到的错误。

iODBC 的常见问题解答关于此类错误的说明如下:

[iODBC] [驱动管理器]指定的驱动无法加载

发生这种情况的原因有几个,仔细考虑架构会有所帮助。您的应用程序已成功加载 libiodbc,并找到了一个 odbc.ini 文件(或通过 ODBCINI 环境变量获得的等效文件),并在该 odbc.ini 中找到了与您的连接中请求的名称匹配的 DSN。

但是,驱动程序管理器在加载该 DSN 定义的“Driver=”行中指定的库时遇到问题。它不存在,或者它的权限不足以让您的应用程序加载它(它必须是可读和可执行的,并且通向它的目录必须是可执行的),或者该文件可能不是动态库 - 它可能是静态库(AIX 上除外的 *.a 文件)或以其他方式损坏。这些都是要检查的,或者如果所有权限都检查出来,你最好重新安装驱动程序。

    所以我检查了权限,但它们是正确的。

    我也重新安装了驱动,但没有任何改变。

    阅读this 后,我检查了 odbc.ini 和 obdcinst.ini。

我将 odbc.ini 更改为:

[ODBC Data Sources]
wsn_mysql_7 = wsn_mysql_7

[ODBC]
TraceLibrary=

[wsn_mysql_7]
 Driver = /usr/local/lib/libmyodbc5w.so
 DATABASE = wsn_db
 DESCRIPTION = DSN for wsn_db in R
 SERVER = localhost
 UID = root
 PASSWORD = *****

和 odbcinst.ini 到

[ODBC Drivers]
MySQL ODBC 5.2 ANSI Driver=Installed
MySQL ODBC 5.2 Unicode Driver=Installed

[ODBC Connection Pooling]
PerfMon=0
Retry Wait=

[MySQL ODBC 5.2 ANSI Driver]
Driver = /usr/local/lib/libmyodbc5a.so
Description = mySQL driver
Threading = 0

[MySQL ODBC 5.2 Unicode Driver]
Driver = /usr/local/lib/libmyodbc5w.so
Description = mySQL driver
Threading = 0

但它似乎并没有改变任何东西。

    我还尝试了基于this question 的替代 RODBC 代码。

    mycom <- odbcDriverConnect("Provider=MSDASQL;Driver=MySQL ODBC 5.2 UNICODE Driver;
    Server=localhost;database=wsn_db;Uid=root;Pwd=*****;Option=3")
    

我不确定下一步该怎么做?即使是在 R 中访问 mySQL 数据的完全不同的方式也会有所帮助。

【问题讨论】:

你试过RMySQL吗? 我已经(最终)在带有 MAMP 的 Mac 上使用 RMySQL 取得了成功 RMySQL 是否满足对 ODCB 驱动程序的需求?因为我认为这就是问题所在。 【参考方案1】:

我终于设法通过使用 unixODBC 和使用 64 位 ANSI 连接器来获得有效的配置。如果您尝试使用 RODBC 连接到 MySQL 数据库,我建议:

    关注this tutorial安装unixODBC和RODBC 安装最新的MySQL ODBC connector。我安装了mysql-connector-odbc-5.3.6-osx10.11-x86-64bit。由于安装程序不起作用,我不得不从 tar 安装。说明是here。 我使用 ODBC Administrator 来配置 DSN,但我想 [Hiltmon's tutorial] 中的说明可能也可以。

    我第一次使用 Unicode 驱动,但得到以下错误:

    Warning messages:
    1: In RODBC::odbcDriverConnect("DSN=wsn_db_dsn;UID=root;PWD=****") :     
    [RODBC] ERROR: state H, code 0, message [unixODBC][
    2: In RODBC::odbcDriverConnect("DSN=wsn_db_dsn;UID=root;PWD=****") :
    ODBC connection failed
    

    我按照RODBC error - ODBC connection failed - can't connect to MySQL with my mac (mavericks) 中的建议选择了 ANSI 驱动程序来纠正这个问题。

我希望这可以为某人节省时间。

【讨论】:

以上是关于在 Mac OS X 上使用 R 访问 MySQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac OS X 上启动 MySQL 的问题

如何在 Mac OS X 上安装 MySQL gem

无法在 Mac OS X 上启动 mysql 得到 mysql.sock 连接错误

在 Mac OS X 上安装 MySQL Python

Mac OS X 10.10.1 AMP 堆栈离线使用

Mac OS X 平台上都有哪些好用且免费的MySQL客户端工具