【问题标题】:How can uwsgi re-establish connection to remote mysql database whenever mysql services are restarted每当重新启动mysql服务时,uwsgi如何重新建立与远程mysql数据库的连接
【发布时间】:2016-05-26 09:22:39
【问题描述】:

我有一个 python web 应用程序,其中应用程序连接到远程数据库。

应用:flask+uwsgi+nginx 。

数据库:mysql(远程)。 该应用程序公开了从远程数据库提供数据的 rest api。

每天db恢复后,远程数据库中的mysql服务都会重启。我的应用程序和远程数据库之间的连接中断,并开始抛出错误消息

MySQL server has gone away.

直到我在我的应用程序中手动重新启动 uwsgi 服务

sudo service uwsgi restart  

远程数据库中的mysql服务重启和我系统中的uwsgi服务重启之间的持续时间是停机时间。

我的应用程序可以在mysql服务重启后立即重新建立连接吗?

请提出任何解决方案?

【问题讨论】:

  • 你是如何连接到数据库的。大多数连接池应该能够处理重新打开关闭的连接。
  • 真的需要每天重启数据库吗?如果真的是,如果它是由脚本完成的,是否让脚本通过 ssh 重新启动你的 uwsgi?

标签: python mysql web-services flask uwsgi


【解决方案1】:

这真的取决于你连接到数据库的方式

如果您使用流行的 ORM:

  • SQLAlchemy ORM

    engine = create_engine('mysql+mysqldb://...', pool_recycle=3600)

    如文档here中所述

  • 小便

    @app.before_request
       def _db_connect():
           database.connect()
    
    
    @app.teardown_request
    def _db_close(exc):
        if not database.is_closed():
            database.close()
    

    如文档here中所述

这个问题在mysql文档here中有深入的解释

【讨论】:

  • 我没有使用 ORM。
猜你喜欢
  • 2011-01-26
  • 2022-01-25
  • 1970-01-01
  • 2017-09-17
  • 2022-07-07
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多