在Mac OS X上访问R中的MySQL数据库

时间:2016-09-28 15:25:21

标签: mysql r macos rodbc

我在从mac on Mac(Mac OS X 10.11.2)访问我的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

到目前为止我尝试过:

  1. 我安装了iODBC驱动程序管理器3.52.12。
  2. 我安装了MySQL连接器odbc-5.3.6-osx10.11-x86-64bit并创建了一个DSN(server = localhost,user = root,password = *****,database = wsn_db)。
  3. 我在iODBC管理员中测试时遇到此错误:

    [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位的问题。

    1. 所以我安装了MySQL连接器odbc-5.2.7-osx10.7-x86-32bit,这是我发现的最新32位版本。当我用iODBC管理员测试时,它似乎工作,但是当我在R中尝试代码时,我得到了开头提到的错误。
    2. iODBC的常见问题解答说明了以下类型的错误:

        

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

           

      为什么会出现这种情况有几个原因,并且通过体系结构进行思考会有所帮助。您的应用程序已成功加载libiodbc,并且已找到odbc.ini文件(或通过ODBCINI环境变量等效),并且在该odbc.ini中找到了与您的连接中请求的名称匹配的DSN。

           

      但是,驱动程序管理器在加载`Driver =&#39;中指定的库时遇到问题。 DSN定义的一行。要么它不存在,要么它的权限不足以允许你的应用程序加载它(它必须是可读的和可执行的,并且导致它的目录必须是可执行的),或者文件可能不是动态库 - 它可以是一个静态库(除了AIX之外的* .a文件)或者是否已损坏。这些都是要检查的东西,或者如果所有权限都签出,您最好重新安装驱动程序。

      1. 所以我检查了许可,但他们是正确的。
      2. 我也重新安装了驱动程序,但它没有改变任何内容。

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

      4. 我将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
        

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

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

          mycom <- odbcDriverConnect("Provider=MSDASQL;Driver={MySQL ODBC 5.2 UNICODE Driver};
          Server=localhost;database=wsn_db;Uid=root;Pwd=*****;Option=3")
          
        2. 我不确定下一步该做什么?即使是以完全不同的方式访问R中的mySQL数据也会有所帮助。

1 个答案:

答案 0 :(得分:1)

我终于通过使用unixODBC和使用64位ANSI连接器来管理工作配置。如果您尝试使用RODBC连接到MySQL数据库,我建议:

  1. 按照this tutorial安装unixODBC和RODBC
  2. 安装最新的MySQL ODBC connector。我安装了mysql-connector-odbc-5.3.6-osx10.11-x86-64bit。我必须从tar安装,因为安装程序不起作用。说明是here
  3. 我使用ODBC Administrator配置DSN,但我想[Hiltmon教程]的指令也可以正常工作。
  4. 我首先使用了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驱动程序来纠正此问题。

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