【问题标题】:Python and Connecting to MySQL over SSHPython 和通过 SSH 连接到 MySQL
【发布时间】:2014-02-18 14:17:13
【问题描述】:

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

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

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 并连接没有问题。希望你能帮忙!谢谢!

【问题讨论】:

    标签: python mysql ssh mysql-python paramiko


    【解决方案1】:

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

    Navicat 是一款专门用于远程管理数据库的软件,它可能通过 SSH 连接并通过它建立 MySQL 连接的隧道。这样,它就好像数据库是在本地安装的一样,而对于数据库,它看起来就像是在本地访问一样。

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

    【讨论】:

    • 我对代码的前三行没有做同样的事情吗(在导入之后)?我不确定我是否完全明白该怎么做。谢谢!
    • 不,您只是通过 SSH 连接;但这对其他事情没有影响。您需要将主机的 MySQL 端口通过隧道连接到某个本地端口。
    • 我明白了(完整的菜鸟)。我正在尝试将“forward.py”与命令一起使用,但不明白如何使用此信息。我尝试的一切都出错了。你能帮忙吗?
    • 不幸的是,我既不了解 Paramiko,也不了解 MySQL 是否已经可以通过端口转发来解决问题。我建议您首先使用外部 SSH 客户端尝试此操作,然后让 MySQL 连接正常工作。如果可行,您可以尝试使用 Paramiko 应用正向配置。
    • 谢谢——我使用了一个 SSH 客户端并让它完美地工作(在取出 paramiko 之后)。
    【解决方案2】:

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

    您可以在另一个类似问题中查看my answer,并提供一些示例代码来使用它。

    【讨论】:

      【解决方案3】:

      db = MySQLdb.connect(host="FTP_hostname",

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        • 2021-08-07
        • 1970-01-01
        • 2014-03-21
        • 2018-04-05
        相关资源
        最近更新 更多