cli执行脚本时出现(2006 MySQL server has gone away) 问题处理

2024-01-07 09:18

本文主要是介绍cli执行脚本时出现(2006 MySQL server has gone away) 问题处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近有同事问我,有个cli运行的处理脚本经常没执行完就退出了,导致日志表里显示脚本运行状态一直显示在执行中。

了解到他的逻辑如下:

程序开始时建立两个数据库连接A和B(因为业务数据表和日志表在两个数据库中),连接A用来保存抓取的业务数据,连接B用来保存脚本运行的状态。当抓取的数据保存完后,用连接B将日志表中的脚本运行状态改为已完成。

听到这个问题就觉得可能是数据库连接断开引起的,因为mysql服务器端在连接闲置时间(wait_timeout)达到设定值后,就会释放掉该连接,开始排查吧。

问题排查过程:

//开始执行脚本
php /path/test.php 

//查看PHP脚本进程ID
ps -ef|grep "test.php"

//用strace查看进程执行过程 
strace -tt -s 512 -p 1111

//手动关闭mysql连接,模拟连接断开的场景

mysql -uroot -p123 -h127.0.0.1show processlist;kill  进程ID;

 

发现有两个问题

1、在用CURL请求外部接口时,如果请求失败抛异常,但业务代码里没有对异常进行处理,导致请求接口超时或其它错误时直接退出执行。

        $errno = curl_errno($ch);if ($errno){curl_close($ch);throw new Exception($errno,0);}

这明显是程序员经验不够,忘记了处理异常。处理方法就是在业务代码里用CURL请求接口时,使用try  catch去捕获异常进行处理。

2、当mysql连接被关闭后,再去做select或insert/update操作时,会异常退出(2006 :MySQL server has gone away)。

这里对数据操作类mysqli.class.php做了一些修改,增加了失败错误码为2006时重试机制

          if ($this->_linkID->errno == 2006 || $this->_linkID->errno == 2013){$this->close();$this->initConnect(true);$result =   $this->_linkID->query($str);if(false !== $result){$this->numRows = $this->_linkID->affected_rows;$this->lastInsID = $this->_linkID->insert_id;return $this->numRows;}}

 

这篇关于cli执行脚本时出现(2006 MySQL server has gone away) 问题处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/579451

相关文章

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

Python自动化处理手机验证码

《Python自动化处理手机验证码》手机验证码是一种常见的身份验证手段,广泛应用于用户注册、登录、交易确认等场景,下面我们来看看如何使用Python自动化处理手机验证码吧... 目录一、获取手机验证码1.1 通过短信接收验证码1.2 使用第三方短信接收服务1.3 使用ADB读取手机短信1.4 通过API获取

关于Nginx跨域问题及解决方案(CORS)

《关于Nginx跨域问题及解决方案(CORS)》文章主要介绍了跨域资源共享(CORS)机制及其在现代Web开发中的重要性,通过Nginx,可以简单地解决跨域问题,适合新手学习和应用,文章详细讲解了CO... 目录一、概述二、什么是 CORS?三、常见的跨域场景四、Nginx 如何解决 CORS 问题?五、基

MySQL zip安装包配置教程

《MySQLzip安装包配置教程》这篇文章详细介绍了如何使用zip安装包在Windows11上安装MySQL8.0,包括下载、解压、配置环境变量、初始化数据库、安装服务以及更改密码等步骤,感兴趣的朋... 目录mysql zip安装包配置教程1、下载zip安装包:2、安装2.1 解压zip包到安装目录2.2

MySQL安装时initializing database失败的问题解决

《MySQL安装时initializingdatabase失败的问题解决》本文主要介绍了MySQL安装时initializingdatabase失败的问题解决,文中通过图文介绍的非常详细,对大家的学... 目录问题页面:解决方法:问题页面:解决方法:1.勾选红框中的选项:2.将下图红框中全部改为英

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

Python自动化Office文档处理全攻略

《Python自动化Office文档处理全攻略》在日常办公中,处理Word、Excel和PDF等Office文档是再常见不过的任务,手动操作这些文档不仅耗时耗力,还容易出错,幸运的是,Python提供... 目录一、自动化处理Word文档1. 安装python-docx库2. 读取Word文档内容3. 修改