es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Túnel SSH con error R: Fallo al conectar a la base de datos: Error: No se puede conectar al servidor MySQL en ‘127.0.0.1’ (115)

Estoy intentando conectarme a una base de datos remota que requiere claves SSH. Estoy ejecutando Shiny Server en Ubuntu 20. El siguiente fragmento funciona desde el intérprete de R, pero falla cuando está en mi aplicación Shiny.

library(RMySQL)
library(callr)

setwd('/carpeta/para/archivopem')

rs <- r_session$new(wait = TRUE, wait_timeout = 3500)

rs$call(function(){
  session <- ssh::ssh_connect("<nombre-de-usuario>@<dirección-ip>", keyfile = "myfile.pem", verbose = FALSE)

  ssh::ssh_tunnel(session, port=3307, target="127.0.0.1:3306")
})

conn <- dbConnect(MySQL(), user='<usuario-db>', password='<contraseña-db>', dbname='<nombre-db>', port=3307, host='127.0.0.1')

query <- "<insertar-consulta-aquí>"
result <- dbSendQuery(conn, query)
data_df <- fetch(result, n = -1)

# Cerrar sesión remota.
rs$close()

setwd('/ruta/a/carpeta/original')

El mensaje de error que recibo desde la aplicación Shiny es:

Error in .local(drv, ...) : 
  Failed to connect to database: Error: Can't connect to MySQL server on '127.0.0.1' (115)
Calls: runApp ... ..stacktraceon.. -> dbConnect -> dbConnect -> .local
Execution halted

A partir de otros mensajes, he intentado cambiar la dirección de enlace del servidor MySQL a 0.0.0.0 en lugar de 127.0.0.1, pero se devuelve el mismo error. Además, intenté usar “localhost” en lugar de 127.0.0.1, pero eso falla tanto en el intérprete como en la aplicación Shiny con un error de “Acceso Denegado”. Me inclino a pensar que este es un problema con la instalación de Shiny, dado que funciona desde la terminal de R cuando se ejecuta línea por línea.

Versión de MySQL en la máquina Ubuntu:

mysql  Ver 8.0.27-0ubuntu0.20.04.1 para Linux en x86_64 ((Ubuntu))

Versión del paquete R:

“`

<blockquote>
packageVersion('RMySQL')
[1] ‘0.10.22’
packageVersion('callr')
[1] ‘3.7.0’
packageVersion('shiny')
[1] ‘1.7.1’
“`</insertar-consulta-aquí></contraseña-db></dirección-ip>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que la aplicación Shiny no puede conectarse al servidor MySQL en 127.0.0.1:3307. Esto podría ser debido a varias razones como la configuración del firewall, un host o número de puerto incorrecto, o problemas de autenticación.

    Una posible solución para resolver este problema es verificar si el túnel SSH está correctamente establecido añadiendo declaraciones de impresión al código. Por ejemplo, puedes añadir declaraciones de impresión antes y después de la llamada a ssh_tunnel() para verificar si el túnel se establece correctamente.

    Otro enfoque es verificar los permisos del archivo de clave privada de SSH (myfile.pem) ubicado en el directorio /folder/to/pemfile/. Asegúrate de que el archivo tenga los permisos adecuados de lectura/escritura para el usuario que ejecuta el proceso del servidor Shiny.

    Si las sugerencias anteriores no resuelven el problema, se recomienda consultar al administrador de la base de datos para verificar si alguna configuración del firewall o método de autenticación está causando la falla de la conexión.

    Además, si el problema se limita a la aplicación Shiny y no al intérprete de R, puede ser útil verificar si faltan variables de entorno en la aplicación Shiny que están presentes en el intérprete de R.

    En general, solucionar problemas de conexiones de túneles SSH en una aplicación Shiny puede ser desafiante debido a varios factores involucrados. Se recomienda probar el código y la configuración SSH minuciosamente en un entorno de desarrollo antes de implementarlo en un servidor de producción.

Comments are closed.