【发布时间】:2020-04-07 04:12:05
【问题描述】:
启动到 MySQL 的 SSH 隧道,以便 MySQL Workbench 可以使用以下命令连接到远程数据库:
ssh -L 3306:localhost:3306 <username>@<domain> -N
MySQL Workbench 可以毫无问题地连接。
我还试图启动 Django 应用程序的本地副本并连接到远程测试数据库,结果遇到了:
django.db.utils.OperationalError: (2002, 'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2 "No such file or directory")'
查看 Django 设置,一切看起来都是正确的。尽管使用了相同的端口,但 Django 似乎忽略了隧道。 Django 在virtualenv 中,所以想知道是否有什么原因导致了它。
有什么建议吗?
【问题讨论】:
-
workbench 有使用 ssh 的选项,只需将选项 standard tcp ip 改为 ssh。通常你必须输入 ssh 的凭据。
-
从错误消息来看,在我看来 Django 应用程序正在尝试使用本地 unix 套接字而不是 TCP/IP 进行连接。我认为数据库连接的“Django 设置”取决于正在使用的 MySQL DB API,mysqlcient 或 MySQL Connector/Python。 docs.djangoproject.com/en/3.0/ref/databases/#mysql-notes 向下滚动到“连接到数据库”。请注意,对于 MySQL,
localhost的主机名值 not 表示 IP 环回 127.0.0.1,这意味着使用本地 unix 套接字文件。为了强制 TCP/IP,我们通常提供一个端口 (3306),我们可以使用 IP 地址。 -
如此处所述:docs.djangoproject.com/en/3.0/ref/settings/#databases 连接到本地 TCP/IP 端口,使用 HOST 值 127.0.0.1 ,如果 HOST 值以正斜杠开头,即使用本地 unix套接字(即不使用 TCP/IP)。没有看到实际的“Django 设置”,我们只是猜测。
-
@spencer7593 所以将我的数据库主机连接字符串从
localhost更改为127.0.0.1解决了这个问题。谢谢您的帮助!如果您想发布答案,我会接受。
标签: mysql django ssh mysql-workbench ssh-tunnel