美文网首页
flask-sqlalchemy出现(2006, "MySQL

flask-sqlalchemy出现(2006, "MySQL

作者: desperado_wen | 来源:发表于2019-11-05 10:16 被阅读0次

    一 问题说明:更新了一下数据库发现过一段时间访问页面会返回500,然后刷新一两次就又可以访问了,查看后台日志文件,发现报错。

    ...
        self._sock.sendall(data)
    ConnectionResetError: [Errno 104] Connection reset by peer
    
    During handling of the above exception, another exception occurred:
    ...
        "MySQL server has gone away (%r)" % (e,))
    sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) 
    (2006, "MySQL server has gone away (ConnectionResetError(104, 
    'Connection reset by peer'))")
    ...
    

    二 问题原因:
    这个问题一般是mysql断开连接了。
    1,mysql有wait_timeout全局变量,这个定义了如果不操作数据库wait_timeout=n秒后mysql就会断开数据库。
    2,无论wait_timeout设置的有多大,总会有超时的一天,这时候需要flask-sqlalchemy自带的全局变量SQLALCHEMY_POOL_RECYCLE,这个变量是说超过SQLALCHEMY_POOL_RECYCLE=n秒后,flask会回收连接,重新创建连接,只要设置n<wait_timeout就可以了。

    wait_timeout和interactive_timeout区别:二者都是设置超过一定的时间就断开数据库的参数,
    不同的是,interactive_timeout为交互式,比方说Navicate premium这样有图形用户界面就是交互式,wait_timeout为非交互式比如jdbc,pymysql或orm这种。

    三 解决过程:1,登陆数据库,查询全局变量:
    show variables like "%timeout%";

    image.png
    这里是说8小时wait_timeout为8小时。
    2,在flask的config.py文件中加入SQLALCHEMY_POOL_RECYCLE=400。

    相关文章

      网友评论

          本文标题:flask-sqlalchemy出现(2006, "MySQL

          本文链接:https://www.haomeiwen.com/subject/zzqsbctx.html