R 中的 SSH 连接到 MySQL 数据库

Jos*_*rre 6 mysql ssh r rmysql

我想使用 RMySQL 包来查询数据库。我通常在使用R 脚本之前ssh website.com在我的 mac 终端中输入。dbConnect()dbGetQuery()

我的数据库位于防火墙后面,只能在本地访问,据我所知,需要通过 ssh 进入。

整个过程可以用R来完成吗?

我尝试过system('ssh website.com'))但没有成功

谢谢

Ada*_*atz 2

您需要在系统和 ssh 服务器之间建立端口转发。

将以下内容添加到您的~/.ssh/config文件中:

Host mysql-tunnel-website.com
  LocalForward 3306 localhost:3306
Run Code Online (Sandbox Code Playgroud)

我强烈建议为此使用 SSH 密钥。 Github 的 SSH 密钥指南非常好。我不是 R 编码员,但 R 可能不喜欢在调用中交互输入密码的需要,system()而 SSH 密钥(当无密码或添加到 ssh 代理时)消除了这种需要。

现在您应该能够在 R 中启动隧道:

Host mysql-tunnel-website.com
  LocalForward 3306 localhost:3306
Run Code Online (Sandbox Code Playgroud)

这会将 website.com 的本地主机端口 3306 映射到 ssh 客户端的本地主机端口 3306,从而允许您在 ssh 客户端系统上运行与在远程 website.com 系统上运行的代码相同的代码。

您的 R 代码需要指向host=localhostand port=3306(这应该是默认值)。

如果远程 SQL 服务器不是由 website.com 的本地主机(端口 3306)提供服务,只需将 更改为相对于可从 website.com 访问的localhost:3306适当组合。server:port如果您无法在 ssh 客户端系统上使用端口 3306(也许您在本地运行 MySQL?),您可以通过首先将其更改3306为任何其他端口来转发到其他端口(我倾向于在前面加上一个数字,例如13306)并且然后请务必port=13306在 R 代码中指定备用端口(例如 )。