我想使用 RMySQL 包来查询数据库。在 R 脚本中使用 dbConnect()
和 dbGetQuery()
之前,我通常在我的 mac 终端中输入 ssh website.com
。
我的数据库在防火墙后面,只能在本地访问,据我所知,需要通过 ssh 进入。
是否可以在 R 中完成整个过程?
我试过 system('ssh website.com'))
没有成功
谢谢
最佳答案
您需要在您的系统和 ssh 服务器之间建立一个端口转发。
将以下内容添加到您的 ~/.ssh/config
文件中:
Host mysql-tunnel-website.com
LocalForward 3306 localhost:3306
我强烈建议为此使用 SSH key 。 Github's SSH key guide很不错。我不是 R 编码员,但 R 可能不喜欢在 system()
调用和 SSH key (无密码或添加到 ssh-agent 时)中交互式输入密码的需要.
现在您应该能够在 R 中启动隧道:
system('ssh -f mysql-tunnel-website.com')
这会将 website.com 的本地主机端口 3306 映射到您的 ssh 客户端本地主机的端口 3306,允许您在 ssh 客户端系统上运行与在远程 website.com 系统上运行的代码相同的代码。
您的 R 代码需要指向 host=localhost
和 port=3306
(这应该是默认值)。
如果远程 SQL 服务器不是由 website.com 的本地主机和端口 3306 提供服务,只需将 localhost:3306
更改为适当的 server:port
组合可从 website.com 访问的内容。如果您无法在您的 ssh 客户端系统上使用端口 3306(也许您正在本地运行 MySQL?),您可以通过将第一个 3306
更改为任何其他端口(我倾向于在数字前加前缀,例如 13306
),然后确保在您的 R 代码中指定备用端口(例如 port=13306
)。
关于mysql - 通过 SSH 连接到 R 中的 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47310068/