zxcf
V2EX  ›  PHP

thinkPhP5.1 框架开发订阅消息过程中遇到 MySQL 跑路的问题

  •  
  •   zxcf · Feb 12, 2019 · 7783 views
    This topic created in 2824 days ago, the information mentioned may be changed or developed.

    thinkqueue+supervisor,任务跑的时候,脚本出现 General error: 2006 MySQL server has gone away,这个问题应该是从哪方面去入手处理好点,网上找不到好的解释,麻烦大佬看看,个人感觉是任务开始跑了,第一次进来消息,数据库链接,如果后续很长时间没有消息进来,就没有数据库操作,导致 MySQL 超时,后续就一直在尝试重新链接,但是链接不上

    Supplement 1  ·  Feb 14, 2019
    TP5.0.6 版本已经修复了这个问题,加入了断线重连机制,在数据库配置文件中开启 break_reconnect=true 就可以了
    19 replies  •  2020-12-04 09:53:02 +08:00
    yemoluo
    yemoluo
    Feb 12, 2019
    1
    任务不多,断了重链
    pynix
    pynix
    Feb 12, 2019
    2
    跑路。。
    zengzizhao
    zengzizhao
    Feb 12, 2019
    3
    处理 2006,出现时重新连一次 mysql
    moult
    moult
    Feb 12, 2019 via iPhone
    4
    跟连接池一样,一分钟左右就去查询一次 select 1 保活即可。
    oldmatch
    oldmatch
    Feb 12, 2019
    5
    为啥需要这样
    Trim21
    Trim21
    Feb 12, 2019
    6
    跑路的翻译很灵性...
    zengzizhao
    zengzizhao
    Feb 12, 2019
    7
    某个长连接很久没有新的请求发起,达到了 server 端的 timeout,被 server 强行关闭。

    此后再通过这个 connection 发起查询的时候,就会报错 server has gone away
    oldmatch
    oldmatch
    Feb 12, 2019
    8
    @moult 为啥需要这样呢?
    zxcf
    zxcf
    OP
    Feb 12, 2019
    9
    @zengzizhao 这样子的话这个 connection 能调用关闭连接吗,然后我在重新连接一次
    yc8332
    yc8332
    Feb 12, 2019
    10
    1.mysql 服务器端有配置的,空闲多久会被断掉,这个可以设置一下
    2.可以把队列进程定期重启一下(也可以避免内存泄露)
    3.修复框架的 bug,mysql 断线重连肯定有 bug。。

    这几种方式都可以修复这个问题
    runAll
    runAll
    Feb 12, 2019 via iPhone
    11
    ini_set('default_socket_timeout', -1);
    看看是不是因为链接超时了
    runningman
    runningman
    Feb 12, 2019
    12
    早遇到了。改了 tp 的源码,
    zxcf
    zxcf
    OP
    Feb 12, 2019
    13
    @runningman 虽然改源码是不好的,但是请问你改的啥,真香
    runningman
    runningman
    Feb 12, 2019
    14
    @zxcf 源码不知道给你是否合适。其实感动很简单啊。楼上的几位其实已经说了。
    4DAX07B8Kle4Dm6T
    4DAX07B8Kle4Dm6T
    Feb 12, 2019 via iPhone
    15
    我也遇到过,连接断开导致的,开始 tp5 的断线重连就可以了
    wo642436249
    wo642436249
    Feb 13, 2019
    16
    mysql 主动断开连接了,可以在操作前,判断下连接是否可用,如果不可用,则删除之前的断开的连接,重新建立连接就行,tp5 中有相关的配置了
    echo404
    echo404
    Feb 13, 2019
    17
    TP5 中可以直接配置数据库断线重连,将 break_reconnect 参数设置为 true 就行
    zxcf
    zxcf
    OP
    Feb 14, 2019
    18
    @echo404 TP5 确实在 5.0.6 版本已经修复了这个,配置开启就 OK 了,我还以为得自己写重连机制了
    awanganddong
    awanganddong
    Dec 4, 2020
    19
    标记一下
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1013 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 19:11 · PVG 03:11 · LAX 11:11 · JFK 14:11
    ♥ Do have faith in what you're doing.