Python并通过SSH连接到MySQL

时间:2014-01-27 16:22:33

标签: python mysql ssh mysql-python paramiko

我正在尝试连接到别人的“机器”上的MySQL数据库。当我使用Navicat for MySQL时,我没有问题连接到它。我试图用Python做同样的事情,所以我不必使用GUI界面。我知道下面的所有信息都是正确的(即使我交换了假信息) - 有人能发现我哪里出错吗?我得到的错误是OperationalError: (2005, "Unknown MySQL server host 'FTP_hostname' (0)")

我的代码(使用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()

再一次,我将所有这些都放入Navicat并且没有问题。希望你能帮忙!谢谢!

3 个答案:

答案 0 :(得分:2)

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

Navicat是一个明确用于远程数据库管理的软件,可能通过SSH连接并通过它连接MySQL连接。这样它就可以像在本地安装数据库一样,对于数据库来说,它看起来好像是在本地访问的。

您可以尝试通过使用Paramiko创建隧道来做同样的事情;另见this question

答案 1 :(得分:0)

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

您可以使用一些示例代码检查另一个类似问题中的my answer以使用它。

答案 2 :(得分:-1)

db = MySQLdb.connect(host =“FTP_hostname”,

主机不需要是127.0.0.1(localhost),因为隧道正在使MySQL数据库本地运行到运行python脚本的机器上吗?