【问题标题】:Connecting Django to remote MySQL database using Workbench使用 Workbench 将 Django 连接到远程 MySQL 数据库
【发布时间】:2018-01-19 06:41:35
【问题描述】:

我在 PythonAnywhere 上托管我的网站。

我在服务上有两个数据库:myusername$productionmyusername$dev

生产数据库每晚都会自行备份,并使用最新一批实时数据加载开发数据库。我正在尝试通过 ssh 将我的 Django 开发环境连接到 dev 数据库,这可以作为 PythonAnywhere 的付费客户。

I followed their advice 并下载了 MySQL Workbench,它可以毫无问题地连接到所述数据库。然后我尝试在 Django 中设置我的dev.py 设置如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'myusername$dev',
        'USER': 'myusername',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

但是这会导致django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' (10061)") 错误。我还尝试将127.0.0.1 替换为localhost,并将主机和端口都留空,但这些都不起作用。

然后我在他们的网站上尝试了其他两个选项,也就是直接通过 python 代码访问数据库,以及使用 Putty(我是 Windows 10 用户),但是这些都不起作用。

任何建议将不胜感激。

【问题讨论】:

  • 检查主机参数127.0.0.1 假设数据库在您的 PC 上。所以这不可能是正确的。所以请改用你服务器的 IP 地址
  • @RiggsFolly 嗯 - 我没有 IP 地址 - 但我有以下内容:myusername.mysql.pythonanywhere-services.com 所以我尝试使用它。它比我使用 localhost 的时间长了一点,但它仍然失败了......不过这次是错误10060!我猜有什么进展?
  • myusername 是否有权远程登录
  • @RiggsFolly 是的,因为它是我过去使用 Workbench 登录的同一用户。我完全失去了!

标签: mysql django database ssh


【解决方案1】:

PythonAnywhere 在这里开发。 The help page that you link to 有几个不同的选项用于从外部连接到 PythonAnywhere MySQL 数据库;听起来你是——或者,至少,最初是——混淆了第一个和后两个。

首先是使用MySQL Workbench。 MySQL Workbench 具有设置 SSH 隧道的选项,以便您可以连接到无法从公共 Internet 直接访问的数据库。但是一旦你建立了那个隧道,它只有在你在 MySQL Workbench 中运行时才有帮助——它不会影响你在你的机器上运行的其他代码。所以它对 Django 代码没有帮助。

第二个选项是当您想从 Python 代码连接到数据库时。如果您可以完全控制何时建立数据库连接,则可以将 SSHTunnelForwarder 包装器放在 SQL 代码周围,您在该 with 语句中执行的任何 SQL 代码都将能够连接到数据库——但代码在该声明之外不会。因此,当您使用 Django 时,这也无济于事,因为它的 MySQL 代码隐藏在 Django 库的深处,并且用 with 语句包装它会非常棘手。

第三个选项是手动设置 SSH 隧道,但不幸的是,这些说明是针对 Unix 环境的——例如。 Linux 或 Mac。当你这样做时,它会在你的本地机器上启动一个服务器——IP 地址 127.0.0.1,端口 3306——它接受连接,然后通过 SSH 转发它们,以便它们从 Pythonanywhere 防火墙中出来并被发送到正确的MySQL 服务器。这意味着本地服务器看起来,在你的机器上编码,就好像它是一个 MySQL 服务器,即使它实际上只是将工作交给 PythonAnywhere 机器。

所以你需要做的(看起来你几乎到了那里!)是设置 PuTTY 来执行 Unix 指令使用 ssh 命令所做的事情。 These instructions 几乎就是你想要的;差异将是

  • “SSH 网关”将是 ssh.pythonanywhere.com
  • “源端口”为 3306。
  • “目标地址”到您的 PythonAnywhere MySQL 数据库主机的名称(来自“数据库”选项卡),后跟 :3306

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多