zoukankan      html  css  js  c++  java
  • 2006 MySQL server has gone away

    诱发场景:消费消息队列时在进入主消费逻辑之前就执行了一条插入mysql的数据日志(起初是为了看看消息是否已经进入了消费程序逻辑),在未走入主消费逻辑之前出现MySQL server has gone away报错。

    导致出现这种报错的可能原因下面这篇文章分析的比较全面
    https://www.jb51.net/article/23781.htm

    我的场景中最有可能是:mysql长连接很久没有新的请求发起,达到了server端的timeout,被server强行关闭。
    此后再通过这个connection发起查询的时候,就会报错server has gone away

    (我的消费进程是一个常驻进程写法如下
    [muread@ucloud-test-ics-3 config.d]$ cat repair-allocation-consume.ini
    [program:repair-allocation-consume]
    command = nohup /usr/bin/php /data/nginx/wms/yii cron/repair-allocation-consume >> /var/log/superLog/repair-allocation-consume.log 2>&1 & ; 启动命令,可以看出与手动在命令行启动的命令是一样的
    autostart = true ; 在 supervisord 启动的时候也自动启动
    user=root ; 运行用户
    numprocs=1 ; 进程数量
    autorestart = true ; 程序异常退出后自动重启
    startretries = 2 ; 启动失败自动重试次数,默认是 3
    redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
    stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
    stdout_logfile_backups = 20 ; stdout 日志文件备份数
    stdout_logfile = /var/log/superLog/repair-allocation-consume.log ; 确保日志目录存在且可写入

    解决方法:
    1.添加MQ成功消费之后的消费确认机制 见 https://segmentfault.com/a/1190000004924668  中的$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
    2.将消费程序——常驻进程改成普通命令
    3.mysql日志改成文件日志

  • 相关阅读:
    Magic-Club开发--第十六天
    (待完成)
    (转)Python多任务之线程
    (转)机器学习常用性能度量中的Accuracy、Precision、Recall、ROC、F score等都是些什么东西?
    排序
    一些c++<new(std::nothrow) >
    一些c++<省去警告>
    一些c++<MFC
    一些c++<auto>
    Unity3D js和C# 间相互调用
  • 原文地址:https://www.cnblogs.com/ryanlamp/p/11195921.html
Copyright © 2011-2022 走看看