Python并通过SSH连接到MySQL

Python并通过SSH连接到MySQL,python,mysql,ssh,mysql-python,paramiko,Python,Mysql,Ssh,Mysql Python,Paramiko,我正在尝试连接到其他“机器”上的MySQL数据库。当我使用Navicat for MySQL时,连接到它没有问题。我正试图用Python做同样的事情,这样我就不必使用GUI界面。我知道我下面的所有信息都是正确的(即使我交换了假信息)——有人能发现我哪里出错了吗?我得到的错误是操作错误:(2005,“未知的MySQL服务器主机‘FTP_主机名’(0)”) 我的代码(使用paramiko进行SSH): 同样,我将所有这些都放到Navicat中,连接没有问题。希望你能帮忙!谢谢 与大多数数据库一样,M

我正在尝试连接到其他“机器”上的MySQL数据库。当我使用Navicat for MySQL时,连接到它没有问题。我正试图用Python做同样的事情,这样我就不必使用GUI界面。我知道我下面的所有信息都是正确的(即使我交换了假信息)——有人能发现我哪里出错了吗?我得到的错误是操作错误:(2005,“未知的MySQL服务器主机‘FTP_主机名’(0)”)

我的代码(使用paramiko进行SSH):


同样,我将所有这些都放到Navicat中,连接没有问题。希望你能帮忙!谢谢

与大多数数据库一样,MySQL默认在本地运行,不允许从外部网络访问。因此,您无法从外部计算机连接到它

Navicat是一种专门用于远程管理数据库的软件,它可能通过SSH进行连接,并通过SSH隧道连接MySQL。通过这种方式,它可以表现为数据库是本地安装的,而对于数据库,它看起来就像是本地访问的


您可以尝试通过使用Paramiko创建隧道来实现同样的目的;另请参见。

如果您仍然需要通过SSH连接到远程MySQL数据库,我使用了一个名为sshtunnel的库,它简化了paramiko(sshtunnel的依赖项)的使用

您可以用一些示例代码检入另一个类似的问题来使用它。

db=MySQLdb.connect(host=“FTP\u hostname”


当隧道将MySQL DB设置为运行python脚本的机器的本地时,主机不需要是127.0.0.1(localhost)吗?

我对代码的前三行(导入后)做的不是同样的事情吗?我不太清楚该怎么做。谢谢!不,你只是通过SSH连接;但这对其他事情没有影响。你需要将主机的MySQL端口隧道到某个本地端口。我明白了(完全没有)。我正在尝试使用“forward.py”使用命令,但不了解如何使用此信息。我尝试的所有操作都会出错。您能提供帮助吗?不幸的是,我既不知道Paramiko,也不知道MySQL是否已经可以转发端口。我建议您首先使用外部SSH客户端尝试此操作,并获得MySQL连接然后开始工作。如果可以的话,您可以尝试使用Paramiko应用转发配置。谢谢——我使用了一个SSH客户端,并且使它能够完美地工作(在去掉Paramiko之后)。
import MySQLdb
import paramiko
import time

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('SSH_hostname', 22, username='me', password='pswrd')

time.sleep(1)

db = MySQLdb.connect(host="FTP_hostname", 
                     user="root", 
                     passwd="pswrd2",
                     db="MyDB")
cur = db.cursor()