【MySQL】Error 2006:MYSQL server has gone away

2024-02-19 23:32

本文主要是介绍【MySQL】Error 2006:MYSQL server has gone away,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题的描述

MFC应用程序远程访问MYSQL数据库,程序初始化时创建一个连接池,通常保存10个连接用于访问数据库使用。该程序平时运行正常,但是程序正常使用后闲置一个晚上不关闭,第二天第一次使用报错如标题。

 

分析

使用命令查询数据库超时参数,服务器安装MYSQL 数据库版本为5.7.22。

查询命令:

show global variables like '%timeout';

查询结果如下: 

+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| have_statement_timeout      | YES      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 60       |
| wait_timeout                | 28800    |
+-----------------------------+----------+
13 rows in set, 1 warning (0.00 sec)

参数wait_timeout值为28800,含义为28800秒,等于8小时。猜测MYSQL数据库在连接闲置超时后自动断开连接。

设置命令

set global wait_timeout=10;

将参数wait_timeout值设为10秒后,调试程序发现报错更为频繁,基本确认超时为该问题出现的原因。

 

解决方法

因为连接创建时,该连接的重连属性是关闭的。官方文档如下:

The MySQL client library can perform an automatic reconnection to the server if it finds that the connection is down when you attempt to send a statement to the server to be executed. If auto-reconnect is enabled, the library tries once to reconnect to the server and send the statement again.

Auto-reconnect is disabled by default.

因此必须在连接被创建时,设置该连接的重连属性,代码如下:

Connection::Connection(const string& host, unsigned port, const string& uname, const string& passwd, const string& db)
{char value = 1;m_conn = mysql_init(NULL);CONN_Throw(m_conn, mysql_real_connect(m_conn, host.c_str(),	uname.c_str(), passwd.c_str(), db.c_str(), port, NULL, 0));//this->charset("utf8");this->charset("gb2312");CONN_Throw(m_conn, mysql_options(m_conn, MYSQL_OPT_RECONNECT, (char *)&value));
}

网上也有许多其他解决该问题的方法,比如重设wait_timeout值为一个相对大的值、心跳包等等。本人觉得这些方法有点绕路,没有真正解决该问题。不妥之处,欢迎拍砖。

 

参考资料

MySQL server has gone away 问题的解决方法:https://www.cnblogs.com/fnlingnzb-learner/p/5984795.html

蛋疼的mysql_ping()以及MYSQL_OPT_RECONNECT:https://www.cnblogs.com/joeblackzqq/p/5614948.html

这篇关于【MySQL】Error 2006:MYSQL server has gone away的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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.将下图红框中全部改为英

MySQL 中的服务器配置和状态详解(MySQL Server Configuration and Status)

《MySQL中的服务器配置和状态详解(MySQLServerConfigurationandStatus)》MySQL服务器配置和状态设置包括服务器选项、系统变量和状态变量三个方面,可以通过... 目录mysql 之服务器配置和状态1 MySQL 架构和性能优化1.1 服务器配置和状态1.1.1 服务器选项

MySQL8.0设置redo缓存大小的实现

《MySQL8.0设置redo缓存大小的实现》本文主要在MySQL8.0.30及之后版本中使用innodb_redo_log_capacity参数在线更改redo缓存文件大小,下面就来介绍一下,具有一... mysql 8.0.30及之后版本可以使用innodb_redo_log_capacity参数来更改

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE