从R连接到MySQL

时间:2018-05-26 15:20:15

标签: mysql r rstudio rmysql

我正在尝试从R连接到MySQL。我已经安装了" 8.0.11 MySQL社区服务器 - GPL"在我的机器上。在R studio中,我安装了RMySQL Library。

当我发出命令时:

con = dbConnect(RMySQL::MySQL(),user="root", password = "password", dbname="test")

我一直收到错误:

  

.local(drv,...)出错:无法连接数据库:错误:   未知数据库'测试'

我不确定为什么它会继续发出此错误。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

显而易见的原因可能是"我希望"因为你没有包含主机IP。我也更喜欢使用pool包。然后您的连接呼叫可能是

library(DBI)
library(RMySQL)
library(pool)

pool <- dbPool(
                  drv = RMySQL::MySQL(),
                  dbname = "db_name",
                  host = "127.0.0.1",
                  username = 'user_name',
                  password = 'password',
                  port = 3306
             )

 onStop(function() {
           poolClose(pool)
         })

另一件事情是,在测试数据库上定义具有适当权限的用户,并在root连接调用中使用此用户作为数据库连接安全性最佳实践,这样做更好。

答案 1 :(得分:1)

这是我用来从R

访问MySQL的代码
# 1. Library
library(RMySQL)

# 2. Settings
db_user <- 'your_name'
db_password <- 'your_password'
db_name <- 'database_name'
db_table <- 'your_data_table'
db_host <- '127.0.0.1' # for local access
db_port <- 3306

# 3. Read data from db
mydb <-  dbConnect(MySQL(), user = db_user, password = db_password,
                 dbname = db_name, host = db_host, port = db_port)
s <- paste0("select * from ", db_table)
rs <- dbSendQuery(mydb, s)
df <-  fetch(rs, n = -1)
on.exit(dbDisconnect(mydb))

请检查一下它的工作原理。

PS。看起来你错过了&#39; db_table&#39;参数。

答案 2 :(得分:1)

RMariaDB 似乎是这些天要走的路。用 MySQL 测试过。

sudo apt-get update
sudo apt-get install libmariadbclient-dev

R 代码:

# install.packages("RMariaDB")
library(DBI)

# Connect to the MySQL database
con <- dbConnect(RMariaDB::MariaDB(), 
             dbname = "test", 
             host = "localhost", 
             port = 3306,
             user = "root",
             password = "password")

# Get table names
tables <- dbListTables(con)

# Display structure of tables
str(tables)

# Always cleanup by disconnecting the database
dbDisconnect(con)

您可能会遇到身份验证问题:

错误:连接失败:无法加载插件缓存_sha2_密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'TopSecret##1234';