V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
jayzau1973
V2EX  ›  Python

请教一个关于 Mysql 连接的问题

  •  
  •   jayzau1973 · 2020-12-10 10:21:30 +08:00 · 2907 次点击
    这是一个创建于 1444 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用 flask 写了个小后台,数据库用的 mysql 。时间长了之后 mysql 连接会自动断开导致报错( orm 用的 peewee ):
    ```
    raise err.InterfaceError("(0, '')")
    peewee.InterfaceError: (0, '')
    ```
    有大佬知道怎么解决这个问题吗...
    17 条回复    2021-01-21 11:45:19 +08:00
    dongxiao
        1
    dongxiao  
       2020-12-10 11:27:40 +08:00 via Android
    我用的 sqlalchemy,采用的方法是设置超时后把 session 设成 global,然后开了个多线程在超时前销毁 session 并重建,用的地方 import 这个包就行
    yagamil
        2
    yagamil  
       2020-12-10 13:16:54 +08:00
    持久化连接池
    jayzau1973
        3
    jayzau1973  
    OP
       2020-12-10 14:31:41 +08:00
    @dongxiao 我在想难道每个写后端的都要这样搞吗,感觉不太合理。PHP 就不用自己去优化
    jayzau1973
        4
    jayzau1973  
    OP
       2020-12-10 14:32:49 +08:00
    @yagamil 连接池倒是有 `PooledMySQLDatabase`,但好像无法持久化...
    676529483
        5
    676529483  
       2020-12-10 14:35:07 +08:00
    数据库连接要在请求结束时关闭,或者交还给连接池,要主动释放资源,flask 可以通过钩子做
    wewin
        6
    wewin  
       2020-12-10 18:53:35 +08:00
    大概过了多久?我记得 mysql 连接,闲置 8 小时会断开
    zhanglintc
        7
    zhanglintc  
       2020-12-10 19:14:34 +08:00
    初始化应该有个自动重连的参数可以设置,找找文档看看呢
    MaxFang
        8
    MaxFang  
       2020-12-10 20:19:06 +08:00
    @jayzau1973 非优化过的框架里面,php 也是没有超时自动重连的吧。一般 mysql 默认连接 8 小时。以前踩过类似的坑。
    littlewing
        9
    littlewing  
       2020-12-10 22:39:51 +08:00 via iPhone
    把数据库的超时断开连接时间调大
    jayzau1973
        10
    jayzau1973  
    OP
       2020-12-11 09:08:19 +08:00
    @wewin
    @littlewing
    超时时间调过了,不过即使时间再长,终会有断开的一天吧。想要有一个自动重连的功能
    jayzau1973
        11
    jayzau1973  
    OP
       2020-12-11 09:11:14 +08:00
    @MaxFang 嘿嘿嘿 PHP 就接触过一点 laravel 框架
    jayzau1973
        12
    jayzau1973  
    OP
       2020-12-11 09:11:25 +08:00
    @zhanglintc 好的我看看
    Rache1
        13
    Rache1  
       2020-12-11 09:43:01 +08:00
    Laravel 是有自动重连的

    \Illuminate\Database\DetectsLostConnections::causedByLostConnection
    daytonight
        14
    daytonight  
       2020-12-11 12:21:59 +08:00
    使用前 ping 一次 mysql,失败则重新建立连接,sqlalchemy 可以设置 pool_pre_ping 参数。
    meshell
        15
    meshell  
       2020-12-11 13:58:10 +08:00
    发个 select 1 呗然后重连
    viiii
        16
    viiii  
       2021-01-21 05:08:17 +08:00
    不知道楼主解决这个问题没有? 一样在这里被卡住了
    jayzau1973
        17
    jayzau1973  
    OP
       2021-01-21 11:45:19 +08:00   ❤️ 1
    @viiii 没呢 断了手动重启- -
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1828 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:28 · PVG 00:28 · LAX 08:28 · JFK 11:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.