OperationalError在读取初始通信数据包时失去与MySQL服务器的连接' DigitalOcean

时间:2014-10-17 16:44:20

标签: mysql flask flask-sqlalchemy digital-ocean

我无法通过我的flask webapp连接到数字海洋上的sql server。我使用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部分下的bind-address,我尝试了所有可能的组合并重新启动了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服务器?任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

我将mysql地址指定为

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

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

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

答案 1 :(得分:-1)

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

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