Удаленное SSH-соединение с MySQL, не прослушивающее порт 3306 - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь подключить Tableau к базе данных SQL, которую я разместил на pythonanywhere.com, но она не работает, и я считаю, что причина в том, что мое удаленное подключение к pythonanywhere.com не имеет процесса, прослушивающего порт 3306. На самом деле, я думаю, что его активно убивают, но я не уверен, правда ли это.

Сейчас я на Windows 10 Machine и подключаюсь через git bash следующим образом:

 ssh -L 3306:jonathanbechtel.mysql.pythonanywhere-services.com:3306 jonathanbechtel@ssh.pythonanywhere.com

После этого я запускаю команду netstat -an и вижу следующее:

enter image description here

Насколько я понимаю, TIME_WAIT status означает, что что-то локально прервало соединение.

Насколько я понимаю, мне нужно иметь локальный адрес 127.0.0.1:3306, чтобы иметь статус LISTENING, чтобы я мог использовать туннель в качестве соединения счто-нибудь еще.

Я также подключился к этой базе данных через блокнот jupyter, а также через MySQL, поэтому я знаю, что это можно сделать в некотором объеме.

Но я не знаю, почему в этом случае соединение прерывается.

Команда telnet 127.0.0.1 3306 говорит, что соединение работает:

enter image description here

ОБНОВЛЕНИЕ:

Проблема в том, что, когда я пытаюсь подключиться к своему соединению PuTTY (через Таблицу), я получаю следующее сообщение об ошибке:

[MySQL][ODBC 8.0(w) Driver]Access denied for user 'myusername'@'localhost' (using password: YES)

Неверное имя пользователя или пароль.

Однако, если я запускаю следующий код Python, я могу подключиться:

import mysql.connector
import sshtunnel

sshtunnel.SSH_TIMEOUT = 5.0
sshtunnel.TUNNEL_TIMEOUT = 5.0

with sshtunnel.SSHTunnelForwarder(
 ('ssh.pythonanywhere.com'),
 ssh_username=info['username'], ssh_password=info['password'],
 remote_bind_address=(info['db_address'], 3306)
) as tunnel:
  connection = mysql.connector.connect(
    user=info['username'], password=info['db_password'],
    host=info['ssh_address'], port=tunnel.local_bind_port,
    database=info['db_name'],
)
df = pd.read_sql_query('SELECT * FROM classes', connection)
connection.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...