MySQL自动重新连接

2023-11-18

最近部署一个系统,后台用线程池来处理请求,而每个线程有一个mysql连接。当系统运行一阶段后,有些请求会出现操作“Internal error”,而操作一次可能又会成功。经过多方调试,发现是MySQL连接超时。如果使用了长连接而长期没有对数据库进行任何操作,那么在timeout值后,mysql server就会关闭此连接,而客户端在执行查询的时候就会得到一个类似于“MySQL server has gone away“这样的错误。解决方法有两个:
1) 增大/etc/my.cnf中wait_timeout的值,比如设置wait_timeout=8640000,即100天。这个值缺省是8小时。这个方法简单,但是不能彻底解决问题。推荐第二种解决方法。
2)使用mysql_ping来自动检查重连。用到两个函数,一个是mysql_ping,另外一个是mysql_options。具体使用方法是在mysql_real_connect之前,mysql_init之后,使用mysql_options。用法如下:
char value = 1;
 (void) mysql_init (&mysql);
 mysql_options(&mysql, MYSQL_OPT_RECONNECT, (char *)&value);
然后在以后mysql_query之前首先使用mysql_ping进行判断,如果连接已经断开,会自动重连。 
不过,请注意,自动重新连接也会导致一些副作用,如下:
    * 任何活动的交易都被回滚,autocommit模式被置为reset。
    * 所有表锁都释放
    * 所有临时表是关闭(撤消)
    * Session variables are reinitialized to the values of the corresponding variables.会话变量被重新初始化为相应的变量。 这也影响那些隐式声明的变量,SET NAMES。比如使用This also affects variables that are set implicitly by statements such as SET NAMES.这也影响了变量,是一套由含蓄的声明,例如订定的名称。
    * 用户变量设置都将丢失。
    * 编制报表释放。
    * 句柄变量被关闭。
    * LAST_INSERT_ID()被重置为0 。

    * 使用GET_LOCK()获得的锁被释放    

http://chyd96.blog.163.com/blog/static/6270607620082731634340/


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL自动重新连接 的相关文章

随机推荐

  • vscode自动化写代码插件 自动生成代码插件

    直接在vscode中搜索chatGPT中文版安装即可 在代码仓中右侧 就去搜索你想要的代码啦 比如想搜索一个深拷贝
  • COW奶牛!Copy On Write机制了解一下

    前言 只有光头才能变强 在读 Redis设计与实现 关于哈希表扩容的时候 发现这么一段话 执行BGSAVE命令或者BGREWRITEAOF命令的过程中 Redis需要创建当前服务器进程的子进程 而大多数操作系统都采用写时复制 copy on
  • 分布式记账的意义

    今天正式开始 区块链方法论 的第二部分 寻根溯源 的第一章节 说到区块链 大多数的人说的最多的就是分布式记账 没错 分布式记账是区块链技术中最广为人知的特征之一 但几乎没有多少人知道为什么要采用分布式记账 所以 今天我们就来说一说分布式记账
  • 记录一下Popmenu的使用以及一些坑:自定义Popupmenu、Menu、Popupmenu添加icon

    今天就记录一下昨天写bug的时候使用Popupmenu的时候遇到的一些问题吧 尝试使用Popupmenu 避免不必要的坑 我贴的代码都是我最后的代码 记录自己看一下 后来参考的人就看看步骤就行 先看看我最后的效果图 壹 Popupmenu的
  • nginx系统学习5--常用配置6--网络限速配置

    6 6 网络限速配置 6 6 1 操作 01 修改配置文件 worker processes 1 events worker connections 1024 http include mime types default type app
  • SpringBoot自动配置原理,一文搞懂

    阅读收获 1 type 1 2 理解SpringBoot自动配置原理 SpringBoot是什么 SpringBoot 的诞生就是为了简化 Spring 中繁琐的 XML 配置 其本质依然还是Spring框架 使用SpringBoot之后可
  • Win11的Linux子系统WSL2安装Ubuntu的关键步骤

    安装Ubuntu 主要参考 官网教程 注意WSL2的重启时机与WSL有所不同 在Ubuntu 22中 配置用户名和子系统分区的界面已经与官网教程有所不同 用户名不能有大写 分区可以采用默认设置 若卡在Ubuntu安装页面 在Windows设
  • 面试宝典:从MobileNetV1到V3,一文全面梳理移动端深度学习模型

    面试宝典 MobileNetV1 V3 MobileNet的设计及实现 MobileNet是一种适用于移动设备的通用计算机视觉神经网络 可用于分类 目标检测和语义分割等多种任务 为了在移动设备上实现高效的计算和减小模型大小 我们可以采用以下
  • DEBUG:Generate Bitstream失败

    问题 约束失败 解决 确保IO初始化引脚正确 和选择合适的电平
  • node socket 简易聊天室

    服务端 const net require net const server net createServer 用户列表 let clients 监听连接 server on connection client gt client on d
  • 解决vscode git push不成功,总是弹出“...reset”或“...Timeout”错误问题?

    问题 解决vscode git push不成功 总是弹出 reset 或 Timeout 错误问题 解决方法 cmd刷新一下ip缓存 ipconfig flushdns 第二种 git push报错 OpenSSL SSL read Con
  • Unity中将3D模型显示在UI上或者显示在UI前面

    标题 Unity中将3D模型显示在UI上或者显示在UI前面 一 将3D模型显示在UI上 使用RawImage和Render Texture组合实现效果 1 创建一个RawImage控件 2 创建一个Render Texture 然后可以调节
  • 记录SpringBoot+Mybatis+PageHelper分页踩坑:Pages总页数查出来始终为1,Total数有误

    记录Mybatis使用PageHelper遇到的坑 使用PageHelper时 PageHelper startPage page limit List
  • 枚举常量

    2011 04 28 12 20 31 分类 C C 语言 标签 c枚举变量 字号大中小订阅 1 枚举常量的定义 enum 枚举类型名 常量1 常量2 常量3 例如定义一个星期的枚举常量 enum Week Mon Tue Wed 这就定义
  • 0-OpenWrt前菜

    前言 接触 op 已达四年 今年开始梳理整体所学 具体还参考了佐大的视频 对 op 缺乏系统知识的可以尝试 总体而言官方文档和源码是最好的教程 文章目录 OpenWrt Study uboot下升级固件 进入uboot 安装串口工具 安装t
  • 猿如意

    目录 一 什么是猿如意 二 借助猿如意安装Visual Studio Code 1 安装猿如意 2 安装Visual Studio Code 三 总结 一 什么是猿如意 猿如意是CSDN推出来的一款面向开发者的工具 他能够帮助开发者 找到自
  • GEE学习笔记 六十七:【GEE之Python版教程一】GEE学习背景介绍

    相信很多人都对GEE已经比较熟悉了 只是不熟悉GEE的Python的API而已 这里只是做一个简单的总结概括一下GEE相关内容 1 GEE学习基本要求 目前市面上无论出现什么新的技术 总会出现一种课程或者资料 xxx天零基础精通xxx 其实
  • 系统分析与设计——lesson16

    使用 ECB 实现 make reservation 用例的详细设计 包含用例简介 顺序图 类图 用例简介 make reservation这个用例包括 根据location和入住时间查询旅馆 可按照某种属性排序显示旅馆 选择房间 填写入住
  • struts验证框架

    关于validation xml 在validator xml中使用了validation rules xml的验证规则注意一定要加其已经定义好的出错消息考到你的资源包里去 否则出错的时候 显示错误对话框里面却什么错误消息都没有 不允许发生
  • MySQL自动重新连接

    最近部署一个系统 后台用线程池来处理请求 而每个线程有一个mysql连接 当系统运行一阶段后 有些请求会出现操作 Internal error 而操作一次可能又会成功 经过多方调试 发现是MySQL连接超时 如果使用了长连接而长期没有对数据