Не удается подключиться в R к серверу MySQL через SSH

Фон

Я пытаюсь получить данные с облачного сервера MySQL. Я только что переместил базу данных с общего сервера на выделенный облачный сервер. На старом месте все нормально работает. Для нового местоположения требуется туннель SSH.

Исследования/Информация:

Все, что я нашел похожим, это эта статья SO. На самом деле это не применимо, так как я никогда не использовал localhost.

Я могу успешно подключиться, используя одни и те же учетные данные как в Sequel Pro, так и в MySQL Workbench, но я не могу заставить сценарий R играть в мяч.

Я могу подключиться к mysql в командной строке.

У меня нет mysql, установленного локально. (Если только он не поставляется с High Sierra; я понятия не имею. В любом случае, если есть локальный экземпляр MySQL, он не работает.)

Код:

Вот что не получается:

con <- dbConnect(RMariaDB::MariaDB(),
                 user = 'soundings_app',
                 password = keyringr::decrypt_kc_pw("Soundings_app"),
                 host = '127.0.0.1',
                 port = 3306,
                 dbname='UFO')

Я также попытался использовать фактический пароль в виде строки и получил ту же ошибку.

Сообщение об ошибке

Error in connection_create(host, username, password, dbname, as.integer(port),  : 
  Failed to connect: Can't connect to MySQL server on '127.0.0.1' (57)

Моя единственная догадка

Единственное, что я могу придумать, это то, что у SequelPro и Workbench было место для ввода местоположения моего закрытого ключа (~/.ssh).

Можете ли вы объяснить, что я делаю неправильно?

ОБНОВИТЬ

Я добавил хост в свой файл ./ssh/config следующим образом:

Host XXX.XXX.130.0
  LocalForward 3306 localhost:3306

Это привело к сбою других моих подключений, поэтому я удалил его. Но Sequel Pro дал мне следующую информацию, когда я попытался подключиться с ~/.ssh/config все еще на месте:

Used command:  /usr/bin/ssh -v -N -S none -o ControlMaster=no -o ExitOnForwardFailure=yes -o ConnectTimeout=10 -o NumberOfPasswordPrompts=3 -i /Users/steves2018air/.ssh/id_rsa -o TCPKeepAlive=no -o ServerAliveInterval=60 -o ServerAliveCountMax=1 [email protected] -L 49700:127.0.0.1:3306

OpenSSH_7.6p1, LibreSSL 2.6.2
debug1: Reading configuration data /Users/steves2018air/.ssh/config
debug1: /Users/steves2018air/.ssh/config line 1: Applying options for XXX.XXX.130.0
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug1: Control socket " none" does not exist
debug1: Connecting to XXX.XXX.130.0 [XXX.XXX.130.0] port 22.
debug1: fd 3 clearing O_NONBLOCK
debug1: Connection established.
debug1: identity file /Users/steves2018air/.ssh/id_rsa type 0
debug1: key_load_public: No such file or directory
debug1: identity file /Users/steves2018air/.ssh/id_rsa-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.6
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.4 pat OpenSSH* compat 0x04000000
debug1: Authenticating to XXX.XXX.130.0:22 as 'ubuntu'

ОБНОВЛЕНИЕ II

По прихоти я попытался изменить хост с «127.0.0.1» на «localhost», просто чтобы посмотреть, что произойдет, и может ли это пролить свет. Немного другая ошибка:

Error in connection_create(host, username, password, dbname, as.integer(port),  : 
  Failed to connect: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

По-прежнему нет решения или объяснения — вы можете помочь?


person Steve    schedule 13.03.2018    source источник


Ответы (2)


Стив, спасибо за это - у меня это сработало отлично - после некоторых незначительных изменений.

Мой был сохранен в файле /etc/mysql/mariadb.cnf.

con <- dbConnect(RMariaDB::MariaDB(),
user = "yourusername",
password = "yourpassword",
groups = "destination",
default.file = "/etc/mysql/mariadb.cnf",
host = '127.0.0.1',
port = 3308,
dbname="yourdb_name")
person Brian    schedule 17.02.2020

Это заняло у меня вечность, но вот как я решил это:

Я добавил это в /etc/mysql/.my.cnf:

[destination]
 user=`username`
 port=3308
 proto=TCP

Затем я подключаюсь к облачному серверу, используя следующее:

ssh [email protected] -L 3308:127.0.0.1:3306

Я могу запустить это в окне терминала вне R, или я могу запустить его в окне терминала в RStudio — в любом случае работает следующее:

con <- dbConnect(RMariaDB::MariaDB(),
                 user = '`username`',
                 password = decrypt_kc_pw("`pw_profile_name`"),
                 groups = "destination",
                 default.file = "/etc/mysql/.my.cnf",
                 host = '127.0.0.1',
                 port = 3308,
                 dbname='`db_name`')
person Steve    schedule 19.03.2018