在 linux 中安装 RMySQL 时如何 select MySQL 版本

How to select MySQL version when installing RMySQL in linux

我是 运行 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)?

所以我在/etc/R/Renviron.site中设置了$MYSQL_HOME并调用了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 中的错​​误消息:

Error in connection_create(host, username, password, dbname, as.integer(port), : Failed to connect: SSL connection error: unknown error number

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

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