Как установить и настроить RMySQL для подключения к удаленной базе данных MySQL (AWS RDS)?
Системная информация, относящаяся к моей проблеме:
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
У меня установлен R на вышеупомянутом AWS Linux AMI. Я пытаюсь получить данные из моего экземпляра RDS, работающего под управлением MySQL, в 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 работал?
Другое исследование показало, что для работы соединения RMySQL с базой данных MySQL необходимо создать SSH-туннель. Это правда? Если я не ошибаюсь, AWS RDS не разрешает SSH-туннелирование.
Любые другие предложения?
1 ответ
Вы пропустили самую важную строку в выходных данных конфигурации:
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 называет его, а последний - DBI для R.