首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OSX sqlalchemy无法连接到'127.0.0.1‘(111)的MySQL服务器

OSX sqlalchemy无法连接到'127.0.0.1‘(111)的MySQL服务器
EN

Stack Overflow用户
提问于 2017-08-22 17:50:08
回答 1查看 855关注 0票数 1

这个应用程序中的python是从docker容器中运行的。容器在网络模式下运行:"host“。

我很难通过python包sqlalchemy连接到MySQL数据库。我得到以下错误。

OperationalError:(OperationalError) (2003年,“无法连接到'127.0.0.1‘(111)上的MySQL服务器”)无

以下终端命令工作正常

代码语言:javascript
复制
mysql -h 127.0.0.1 -u my_user --password='password' db -e "SHOW TABLES;"
enter code here

也许sqlalchemy没有使用你说的正确的配置?在第一个连接到MySQL之前,我已经在调试行中打印出了配置:

代码语言:javascript
复制
  print config.get('repository', 'host') // 127.0.0.1
  print config.get('repository', 'user') // my_user
  print config.get('repository', 'passwd') // password

也许那个配置还没有变成炼金术?让我们打印出引擎字符串。

代码语言:javascript
复制
  engine = getUnaffiliatedEngine()
  print engine //Engine(mysql://my_user:***@127.0.0.1:3306)
  with engine.connect() as connection:
    for s in statements:
      if s.strip():
        connection.execute(s)

也许有超过一个版本的mysql在运行?只有一个进程正在运行:

代码语言:javascript
复制
ps -ef | grep mysql

74 15459 10:14 74 ? 0:00.80 /usr/local/mysql/bin/mysqld --user=_mysql

也许那个用户没有访问数据库的权限?

代码语言:javascript
复制
mysql> select User, Host from mysql.user;

+------+--------------------------+
| User | Host                     |
+------+--------------------------+
|my_user 127.0.0.1                |
| root | 127.0.0.1                |
| root | ::1                      |
|      | localhost                |
| root | localhost                |
+------+--------------------------+

类似地,“显示数据库”显示数据库存在。我已将每个数据库的所有特权授予该用户。我也让女皇们脸红了。

也许是某种防火墙规则阻止了连接?我用的是小告密者,整个防火墙都被拆除了来测试这个。

到目前为止,我甚至不知道还需要调试什么。下面是抛出连接错误的python脚本的简化版本:

代码语言:javascript
复制
DSN_FORMAT = "mysql://%(user)s:%(passwd)s@%(host)s:%(port)s"

def getDSN():
  return DSN_FORMAT % dict(config.items("repository"))

def getUnaffiliatedEngine():
  return create_engine(getDSN())

def reset(offline=False):
  config.loadConfig()
  dbName = config.get('repository', 'db')
  print config.get('repository', 'host')
  print config.get('repository', 'user')
  print config.get('repository', 'passwd')

  resetDatabaseSQL = (
      "DROP DATABASE IF EXISTS %(database)s; "
      "CREATE DATABASE %(database)s;" % {"database": dbName})
  statements = resetDatabaseSQL.split(";")

  engine = getUnaffiliatedEngine()
  print engine
  with engine.connect() as connection:
    for s in statements:
      if s.strip():
        connection.execute(s)

下面是tcpdump -i lo0 port 3306的输出:

代码语言:javascript
复制
11:44:41.224036 IP localhost.58797 > localhost.mysql: Flags [P.], seq 3915736486:3915736498, ack 2134634265, win 12519, options [nop,nop,TS val 980567261 ecr 980503692], length 12
11:44:41.224105 IP localhost.mysql > localhost.58797: Flags [.], ack 12, win 12737, options [nop,nop,TS val 980567261 ecr 980567261], length 0
11:44:41.224178 IP localhost.mysql > localhost.58797: Flags [P.], seq 1:19, ack 12, win 12737, options [nop,nop,TS val 980567261 ecr 980567261], length 18
11:44:41.224218 IP localhost.58797 > localhost.mysql: Flags [.], ack 19, win 12519, options [nop,nop,TS val 980567261 ecr 980567261], length 0
11:45:07.422776 IP localhost.58796 > localhost.mysql: Flags [P.], seq 2953728354:2953728366, ack 432872138, win 12483, options [nop,nop,TS val 980593366 ecr 980533534], length 12
11:45:07.422807 IP localhost.mysql > localhost.58796: Flags [.], ack 12, win 12729, options [nop,nop,TS val 980593366 ecr 980593366], length 0
11:45:07.422856 IP localhost.mysql > localhost.58796: Flags [P.], seq 1:19, ack 12, win 12729, options [nop,nop,TS val 980593366 ecr 980593366], length 18
11:45:07.422877 IP localhost.58796 > localhost.mysql: Flags [.], ack 19, win 12482, options [nop,nop,TS val 980593366 ecr 980593366], length 0

MySQL 5.6OSX El Capitan 10.11.6

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-22 18:51:42

你写的最后一条评论是非常重要的,也可能是问题的原因。

我非常肯定您的Docker容器有自己的回环接口,其地址为127.0.0.1,与运行MySQL的OSX回送接口不同。

我建议您将监听MySQL的地址放在容器内可见的地址上。您可以在容器中轻松地调试该配置,从而生成telnet ip_address 3306

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45824015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档