Ich versuche, mit dplyr eine Verbindung zu einer entfernten Datenbank herzustellen, die ich normalerweise über einen SSH-Tunnel abfrage.
Ich habe zuerst einen SSH-Tunnel wie folgt eingerichtet:
%Vor%An dieser Stelle kann ich auf die Datenbank zugreifen, indem ich mich mit localhost: 3307 verbinde. Zum Beispiel:
%Vor%Wenn ich versuche, über dplyr auf dieselbe Datenbank zuzugreifen, bekomme ich einen Fehler, dass ich mich nicht mit dem lokalen MySQL-Socket verbinden kann:
%Vor%Nach meinem Verständnis versucht RMySQL / dplyr, auf dem lokalen Computer nach einer Socket-Datei zu suchen, sollte sie aber auf dem Remote-Server suchen. Gibt es eine Möglichkeit, dies zu beheben, oder ein Workaround?
UPDATE:
Wenn ich versuche, über dbConnect / RMySQL eine Verbindung herzustellen, funktioniert die Verbindung einwandfrei:
%Vor% So albern wie es klingt, das Ersetzen von localhost
durch eine IP-Adresse ( 127.0.0.1
) löst das Problem.
Eine Erklärung finden Sie in der MySQL-Dokumentation :
Unter Unix behandeln MySQL-Programme den Hostnamen localhost auf eine Art und Weise, die sich wahrscheinlich von dem unterscheidet, was Sie im Vergleich zu anderen netzwerkbasierten Programmen erwarten.
Bei Verbindungen zu localhost versuchen MySQL-Programme, eine Verbindung zum lokalen Server herzustellen, indem sie eine Unix-Socket-Datei verwenden. Dies tritt selbst dann auf, wenn eine Option --port oder -P angegeben wird, um eine Portnummer anzugeben .
Um sicherzustellen, dass der Client eine TCP / IP-Verbindung zum lokalen Server herstellt, verwenden Sie --host oder -h, um einen Hostnamen von 127.0.0.1 oder die IP-Adresse oder den Namen des lokalen Servers anzugeben.
Tags und Links r dplyr ssh-tunnel rmysql