我试图使用dplyr连接到远程数据库,我通常通过ssh隧道进行查询。使用SSH tunel时无法通过套接字错误连接到本地MySQL服务器
我首先建立一个SSH隧道类似如下:
alias tunnel_ncg='ssh -fNg -L 3307:127.0.0.1:3306 [email protected] mysql5 -h 127.0.0.1:3306 -P 3307 -u mysqluser -p mypassword'
在这一点上我可以通过连接到本地主机访问数据库:3307。例如:
mysql -h '127.0.0.1' -P 3307 -u mysqluser
如果我尝试访问通过dplyr同一个数据库中,我得到一个错误说,它不能连接到本地MySQL插座:
> conDplyr = src_mysql(dbname = "mydb", user = "mysqluser", password = "mypassword", host = "localhost", port=3307)
Error in .local(drv, ...) :
Failed to connect to database: Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
我的理解是,RMySQL/dplyr正试图在本地计算机上查找套接字文件,但是他们应该真的在远程服务器上查找套接字文件。有没有办法解决这个问题或解决方法?
UPDATE:
如果我试图通过数据库连接/ RMySQL连接,该连接工作正常:
> dbConnect(dbDriver("MySQL"), user="mysqluser", password="mypassword", dbname="mydb", host="127.0.0.1", port=3307)
<MySQLConnection:0,1>
对我而言,mysql绑定到本地IP 10.x.x.x,所以我必须替换127.0.0.1。因此,请在Linux上检查etc/my.cnf以确保您使用正确的IP。 – barryku
这对我有用。奇怪的是,Django Python会连接好,但R的各种软件包都被拒绝!多烦人。版本:R 3.4.1。 – Deleet