我在Docker容器中运行R应用程序,并希望使用RMySQL库连接到MySQL 8数据库。我可以使用mysql终端命令从容器连接到数据库,而不会出现任何问题,但是当我在R脚本中调用dbConnect()时,会收到未知的SSL连接错误(请参见下文)。

由于我在终端命令以及R脚本中使用了相同的SSL证书,因此它必须与RMySQL使用的MySQL版本有关。我也需要在容器中安装MySQL 5.7,因为其他一些R软件包不能以其他方式构建。但是,根据下面的线程,您可以指定在安装RMySQL时要使用的MySQL版本的目录:

adding RMySQL package to R fails (on Windows)?

所以我在$MYSQL_HOME中设置了/etc/R/Renviron.site并称为install.packages('RMySQL',type='source')

显然,您还需要复制一些.lib和.dll文件以使其在Windows中工作,但是在Linux的哪里可以找到等效文件?

数据库处理程序脚本:

#' @import DBI
#' @import RMySQL

connectToDatabase <- function(myproject.db_config) {
  dbConfig <- read.properties(myproject.db_config)
  print(dbConfig)

  dbHandle <- dbConnect(
    MySQL(),
    dbname = dbConfig$databaseName,
    host = dbConfig$host,
    port = as.integer(dbConfig$port),
    user = dbConfig$user,
    password = dbConfig$password
  )
  return(dbHandle)
}


传递给read.properties()命令的配置文件:

host=domain.subdomain.de
port=3306
user=john.doe
password=mypassword
databaseName=my_db
ssl-ca=/staging/mysql-ssl/ca.pem
ssl-cert=/staging/mysql-ssl/client-cert.pem
ssl-key=/staging/mysql-ssl/client-key.pem


R中的错误消息:


  connection_create(主机,用户名,密码,dbname,as.integer(port),
   连接失败:SSL连接错误:错误编号未知

最佳答案

我自己找到了解决方案。 SSL证书未在dbConnect()调用中应用。它们需要在mysql.cnf文件中定义,该文件在dbConnect()参数中传递给default.file

dbHandle <- dbConnect(
    MySQL(),
    dbname = dbConfig$databaseName,
    host = dbConfig$host,
    port = as.integer(dbConfig$port),
    user = dbConfig$user,
    password = dbConfig$password,
    default.file = dbConfig$configFile
)


传递给read.properties()命令的配置文件:

host=domain.subdomain.de
port=3306
user=john.doe
password=mypassword
databaseName=my_db
configFile=/staging/config/mysql.cnf


mysql.cnf:

[mysqld]
ssl-ca=/staging/mysql-ssl/ca.pem
ssl-cert=/staging/mysql-ssl/client-cert.pem
ssl-key=/staging/mysql-ssl/client-key.pem

关于mysql - 在Linux中安装RMySQL时如何选择MySQL版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58695043/

10-10 11:11