我正在尝试将Tableau连接到我在pythonanywhere.com上托管的SQL数据库,但是它无法正常工作,我相信原因是我与pythonanywhere.com的远程连接没有进程监听端口3306。事实上,我认为它正在被积极地杀死,但是我不确定那是真的。
现在,我在Windows 10计算机上,并通过git bash通过以下方式进行连接:
ssh -L 3306:jonathanbechtel.mysql.pythonanywhere-services.com:3306 jonathanbechtel@ssh.pythonanywhere.com
执行完此操作后,我运行命令netstat -an
并看到以下内容:
我的理解是,TIME_WAIT
状态意味着某些内容在本地终止了连接。
我的理解是,我需要具有本地地址127.0.0.1:3306
并处于LISTENING
状态,以便我可以将隧道用作与其他任何对象的连接。
我还在jupyter笔记本中以及通过MySQL工作台从外部连接到该数据库,因此我知道它可以以某种方式完成。
但是我不知道为什么在这种情况下连接被终止。
命令telnet 127.0.0.1 3306
表示连接有效:
更新:
问题是,当我尝试通过Tableau连接到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()