【问题标题】:OperationalError Lost connection to MySQL server at 'reading initial communication packet' DigitalOceanOperationalError 在“读取初始通信数据包”时失去与 MySQL 服务器的连接 DigitalOcean
【发布时间】:2014-10-17 16:44:19
【问题描述】:

我无法通过我的烧瓶 webapp 连接到我在数字海洋上的 sql 服务器。我使用flask-sqlalchemy将mysql数据库绑定到Flask。

我可以通过myipaddress:5000/phpmyadmin的phpmyadmin接口访问mysql服务器

因为我使用的是 Nginx(我将它绑定到端口 80)。将 Apache 绑定到端口 5000。所以我的 phpmyadmin 界面可以在

访问
myipaddress:5000/phpmyadmin

在我的烧瓶应用程序中,我指定了

SQLALCHEMY_DATABASE_URI ='mysql://root:password@myipaddress:5000/databasename'

当我尝试使用带有 db.create_all() 的 shell 在我的数据库上创建表时 - 它只是没有响应。光标永远闪烁,然后我在几分钟后得到我在标题上引用的操作错误

我能够在我的本地开发机器上运行相同的设置。所以我知道这不是烧瓶配置问题,而只是 mysql 访问问题。我在 digitalocean 上安装了我的 webapp(不确定 mysql 服务器是否在防火墙后面或类似的东西使其无法访问

/etc/mysql/my.cnf

对于 mysql_d 部分下的绑定地址,我尝试了所有可能的组合并重新启动了 mysql 服务器,但没有成功

我尝试了 localhost, 127.0.0.1, 127.0.0.1:5000, myipaddress 作为绑定地址(也尝试将其注释掉),但没有任何结果。

我还尝试从 mysql 命令行获取表属性上的用户 current_user,它被列为两者的 root@localhost

来自这个帖子:Lost connection to MySQL server at 'reading initial communication packet', system error: 0;我知道它与防火墙有关,但不知道如何纠正。

Anyidea 如何将我的烧瓶应用程序连接到 mysql 服务器?任何帮助将不胜感激

【问题讨论】:

    标签: mysql flask flask-sqlalchemy digital-ocean


    【解决方案1】:

    我将mysql地址指定为

    mysql://root:password@myipaddress:5000/databasename
    

    但由于我的烧瓶应用程序和 mysql 服务器在同一台服务器上运行,所以当我将 myipaddress:5000 替换为 localhost:5000 时,烧瓶应用程序能够访问 mysql 服务器

    mysql://root:password@localhost:5000/databasename
    

    【讨论】:

    • 你是说SQLALCHEMY_DATABASE_URI = 'mysql://root:password@localhost:5000/databasename' 有效吗?里面有 5000 个似乎很奇怪。
    • 是的,确实很奇怪。我在我的 apache 上设置了重定向到端口 5000,但不确定为什么 MySQL 必须指向 localhost:5000
    【解决方案2】:

    phpmyadmin 只是数据库的 Web 界面,如果您正在考虑将 Flask 应用程序连接到 MySql 数据库,您需要将 SQLALCHEMY_DATABASE_URI 指向实际的 MySQL 数据库,而不是指向该数据库的 Web 界面数据库。

    MySql 通常在端口 3306 上运行。我相信 SQLAlchemy 足够聪明,知道这是默认值,所以你的连接字符串应该是:SQLALCHEMY_DATABASE_URI ='mysql://root:password@localhost/databasename' 或者如果你在不同的端口/外部 IP 地址上运行:@987654323 @。请记住,如果您要连接到外部服务器上的 MySQL 数据库(与运行 Flask 应用程序的服务器不同),则必须更改配置以允许这种访问。

    【讨论】:

    • 当然我知道 phpmyadmin 是数据库的 Web 界面!不,我并没有试图将它指向网络界面!
    猜你喜欢
    • 2012-06-25
    • 2014-01-15
    • 2011-10-09
    • 2011-11-23
    • 2015-06-29
    • 2011-07-07
    • 2011-08-10
    相关资源
    最近更新 更多