Подключение к MySQL из R

Я пытаюсь подключиться к MySQL из R. Я установил на свой компьютер "8.0.11 MySQL Community Server - GPL". В студии R я установил библиотеку RMySQL.

Когда я даю команду:

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

Я продолжаю получать ошибку:

Ошибка в .local (drv, ...): не удалось подключиться к базе данных: ошибка: неизвестная база данных «тест»

Я не уверен, почему он продолжает выдавать эту ошибку. Какие-либо предложения?


person user9549524    schedule 26.05.2018    source источник
comment
Ошибка: неизвестная база данных "тест".   -  person Titou    schedule 08.10.2020


Ответы (3)


Вот код, который я использую для доступа к MySQL из R

# 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. Похоже, вы пропустили параметр 'db_table'.

person Andrii    schedule 26.05.2018
comment
andrii Извините, возможно, здесь не то место, чтобы спросить, но у меня проблема с подключением к mysql с использованием require_ secure_ transport=ON здесь. Если у вас есть какое-либо решение, я могу опубликовать еще один вопрос в SO. Заранее большое спасибо. - person A. Suliman; 26.05.2018
comment
Я разместил то, что работает для меня. Если это полезно, пожалуйста, вы знаете, что здесь делать - person Andrii; 26.05.2018
comment
Извините, может быть, мой комментарий не был ясен. Пытались ли вы когда-нибудь подключиться к mysql при определении require_secure_transport=ON в etc/mysql/my.cnf. - person A. Suliman; 26.05.2018

Очевидная причина может быть «Надеюсь», потому что вы не указали 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 в качестве наилучшей практики безопасности подключения к БД.

person A. Suliman    schedule 26.05.2018

Кажется, 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)

Вы можете столкнуться с проблемами аутентификации:

Ошибка: Не удалось подключиться: не удалось загрузить плагин caching_sha2_password:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'TopSecret##1234';
person Harley    schedule 15.05.2021