我试图连接到一个MySQL服务器,该服务器被连接到给定的服务器所限制。我试图通过这个限制服务器连接,而没有物理连接。在R脚本内部的SSH进入MySQL数据库
通过命令行可以创建SSH连接,之后我可以从命令行运行MySQL命令。例如:
ssh [email protected]
[email protected]'s password:
[[email protected] ~]$ mysql -h mySQLHost -u mySQLUsername -p mySQLPassword
不过,我想从R内连接到MySQL数据库,这样我就可以发送查询表中读入我的当前R会话。通常我会在命令行中运行R会话,但服务器没有安装R。
例如,我有此代码段,当我物理连接到服务器(填写信息改变),那个工作:
myDB <- dbConnect(MySQL(), user="mySQLUsername", password="mySQLPassword", dbname="myDbname", host="mySQLHost")
从本质上说,我想通过一个管道来运行这个相同的命令,所以myDB对象是一个可用的mySQL连接。
我一直在试图从R内部管道进入限制服务器,并且已经能够读取一个csv文件。例如:
dat <- read.table(pipe('ssh [email protected] "cat /path/to/your/file"'))
这促使我要我的密码,并且表读取(如建议它会here)。但是,我不确定如何将其转换为MySQL连接。例如,我应该使管道部分的参数为host
?这是我的第一个想法,但一直无法做到这一点。
任何帮助,将不胜感激。
但是这会导致R中的错误:'.local错误(drv,...): 无法连接到数据库:错误:在'握手:读取inital通信数据包'时丢失与MySQL服务器的连接,系统错误:2'。并且在隧道打开的情况下命令行中出现错误:“通道3:打开失败:连接失败:连接被拒绝”。你有什么想法,我做错了什么?我在做本地主机和端口有问题吗? – kneijenhuijs
我的猜测是承载数据库的服务器不允许网关端口转发。当服务器拒绝连接时(通常是由于安全权限),您通常会看到该错误消息。如果你有sudo访问服务器,[这里是一个体面的指南](http://blog.trackets.com/2014/05/17/ssh-tunnel-local-and-remote-port-forwarding-explained- with-examples.html)启动并运行 –
重新加载第一条评论,因为我不小心遗留在服务器信息中: 感谢您的回复。我以前使用类似的隧道通过服务器使用的phpmyadmin门户访问MySQL服务器。尽管如此,我使用了一个稍微不同的隧道:'ssh -D 8080 userName @ sshHost'。哪些工作。我用命令行打开了隧道:'ssh -L 9000:localhost:3306 userName @ sshHost'。然后在RI认为这个代码应该工作:myDB < - dbConnect(MySQL(),user =“mySQLUsername”,password =“mySQLPassword”,dbname =“myDbname”,host =“127.0.01”,port = 9000) – kneijenhuijs