V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
androids
V2EX  ›  MySQL

MySQL 数据库连接自动断开的问题

  •  
  •   androids · 2023-05-08 10:28:55 +08:00 · 1800 次点击
    这是一个创建于 563 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我用 Fastapi 写了个后端,连接的是 MySQL 数据库,在测试阶段发现,过一晚上再来测试,诸如登录、查询这样的功能,会返回内部错误,但是再多点两下(正好两下)就正常了。

    经过搜索后得知是 MySQL 有一个连接最大空闲时间的参数,默认是 8 小时,刚好一晚上后连接就都断开了。

    我的疑惑是为什么断开连接后要请求三次才能重新建立连接,另外 Fastapi 就不能在用户请求的时候一步到位自动建立连接吗?

    请各位大佬解惑,也给支个招怎么解决。

    7 条回复    2023-05-10 14:27:53 +08:00
    Oktfolio
        1
    Oktfolio  
       2023-05-08 10:36:47 +08:00
    连接池没有没有 keepalive 功能吗?
    stille
        2
    stille  
       2023-05-08 10:57:54 +08:00
    正好前些天遇到同样问题。
    加连接池解决了

    ```
    from sqlalchemy.pool import QueuePool

    engine = create_engine(SQLALCHEMY_DATABASE_URL, poolclass=QueuePool,
    pool_size=20, max_overflow=0, pool_recycle=600, pool_pre_ping=True)
    SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

    ```
    cyningxu
        3
    cyningxu  
       2023-05-08 14:19:31 +08:00
    这是直接裸连没上连接池吗?
    androids
        4
    androids  
    OP
       2023-05-08 14:33:52 +08:00
    @stille 我试试看,谢谢了
    androids
        5
    androids  
    OP
       2023-05-08 14:34:21 +08:00
    @cyningxu 不道啊,就对着官方文档一顿咔咔整,文档也没提连接池的事
    androids
        6
    androids  
    OP
       2023-05-08 14:35:25 +08:00
    @Oktfolio 有吧,还没整明白
    lyuanxiang20
        7
    lyuanxiang20  
       2023-05-10 14:27:53 +08:00 via Android
    有用阿里云的吗?聊聊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3695 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:33 · PVG 18:33 · LAX 02:33 · JFK 05:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.