如何安装和配置RMySQL以连接到远程MySQL数据库(AWS RDS)?

时间:2014-05-03 17:45:10

标签: mysql r amazon-web-services ssh rmysql

与我的问题相关的系统信息:

AWS RDS DB Instance
Instance Class - db.m1.small
Engine - MySQL 5.6.13

AWS EC2 Linux AMI
https://aws.amazon.com/amazon-linux-ami/2014.03-release-notes/

R version 3.0.2
i686-redhat-linux-gnu (32-bit)

Linux MySQL packages installed:
mysql.noarch            5.5-1.6.amzn1        @amzn-main   
mysql-server.noarch     5.5-1.6.amzn1        @amzn-main   
mysql55.i686            5.5.37-1.46.amzn1    @amzn-updates
mysql55-common.i686     5.5.37-1.46.amzn1    @amzn-updates
mysql55-libs.i686       5.5.37-1.46.amzn1    @amzn-updates
mysql55-server.i686     5.5.37-1.46.amzn1    @amzn-updates

我在上述AWS Linux AMI上安装了R。我正在尝试将运行MySQL的RDS实例中的数据提取到R数据帧中。

目前,我已将DBI软件包安装到R中,但安装RMySQL失败并出现以下错误:

$> R CMD INSTALL RMySQL_0.9-3.tar.gz
* installing to library ‘/usr/lib/R/library’
* installing *source* package ‘RMySQL’ ...
** package ‘RMySQL’ successfully unpacked and MD5 sums checked
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking how to run the C preprocessor... gcc -E
checking for compress in -lz... yes
checking for getopt_long in -lc... yes
checking for mysql_init in -lmysqlclient... no
checking for egrep... grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking mysql.h usability... no
checking mysql.h presence... no
checking for mysql.h... no
checking for mysql_init in -lmysqlclient... no
checking for mysql_init in -lmysqlclient... no
checking for mysql_init in -lmysqlclient... no
checking for mysql_init in -lmysqlclient... no
checking for mysql_init in -lmysqlclient... no
checking for mysql_init in -lmysqlclient... no
checking for mysql_init in -lmysqlclient... no
checking /usr/local/include/mysql/mysql.h usability... no
checking /usr/local/include/mysql/mysql.h presence... no
checking for /usr/local/include/mysql/mysql.h... no
checking /usr/include/mysql/mysql.h usability... no
checking /usr/include/mysql/mysql.h presence... no
checking for /usr/include/mysql/mysql.h... no
checking /usr/local/mysql/include/mysql/mysql.h usability... no
checking /usr/local/mysql/include/mysql/mysql.h presence... no
checking for /usr/local/mysql/include/mysql/mysql.h... no
checking /opt/include/mysql/mysql.h usability... no
checking /opt/include/mysql/mysql.h presence... no
checking for /opt/include/mysql/mysql.h... no
checking /include/mysql/mysql.h usability... no
checking /include/mysql/mysql.h presence... no
checking for /include/mysql/mysql.h... no

Configuration error:
  could not find the MySQL installation include and/or library
  directories.  Manually specify the location of the MySQL
  libraries and the header files and re-run R CMD INSTALL.

INSTRUCTIONS:

1. Define and export the 2 shell variables PKG_CPPFLAGS and
   PKG_LIBS to include the directory for header files (*.h)
   and libraries, for example (using Bourne shell syntax):

      export PKG_CPPFLAGS="-I<MySQL-include-dir>"
      export PKG_LIBS="-L<MySQL-lib-dir> -lmysqlclient"

   Re-run the R INSTALL command:

      R CMD INSTALL RMySQL_<version>.tar.gz

2. Alternatively, you may pass the configure arguments
      --with-mysql-dir=<base-dir> (distribution directory)
   or
      --with-mysql-inc=<base-inc> (where MySQL header files reside)
      --with-mysql-lib=<base-lib> (where MySQL libraries reside)
   in the call to R INSTALL --configure-args='...' 

   R CMD INSTALL --configure-args='--with-mysql-dir=DIR' RMySQL_<version>.tar.gz

ERROR: configuration failed for package ‘RMySQL’
* removing ‘/usr/lib/R/library/RMySQL’

很明显,我需要将安装指向安装MySQL的地方,但我不知道从哪里开始找到正确的目录。我做了以下尝试环顾四周:

$> find / -name mysql
/usr/share/mysql
/usr/lib/perl5/vendor_perl/auto/DBD/mysql
/usr/lib/perl5/vendor_perl/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/var/lib/mysql
/var/lib/mysql/mysql

因此我的AWS Linux实例上有很多不同的MySQL目录。我在安装路径中使用哪一个?我应该试错吗?

我的另一个问题是(假设我正确安装了RMySQL),MySQL服务器是否必须在安装了R的同一物理(虚拟?)机器上运行才能使RMySQL正常工作?

其他研究表明,必须为与MySQL数据库的RMySQL连接创建SSH隧道才能工作。这是真的?如果我没有弄错的话,AWS RDS不允许SSH隧道。

还有其他建议吗?

1 个答案:

答案 0 :(得分:2)

您错过了配置输出中最重要的一行:

checking for mysql.h... no

您已安装MySQL的运行时软件包。您现在需要开发包

在Debian / Ubuntu下,我们强加了这些Build-Depends(我刚刚编辑了最小版本要求):

Build-Depends: debhelper, cdbs, r-base-dev, libmysqlclient-dev, r-cran-dbi

前两个是Debian打包内部,第三个是R,第四个是MySQL,你需要将它映射到任何RH / FC调用它,最后一个是R的DBI。