加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – MySQL错误2006:MySQL服务器已经消失(读取通信包时出错)

发布时间:2020-12-16 06:52:07 所属栏目:百科 来源:网络整理
导读:我目前正在开发一个C项目,需要连接到存储在LAN网络上另一台机器上的 MySQL数据库. 连接到数据库工作正常,我可以运行一些查询没问题,但在循环中的同一点迭代结果(在第三次迭代)数据库连接关闭,我给出的错误是: MySQL server has gone away. 当我检查服务器日
我目前正在开发一个C项目,需要连接到存储在LAN网络上另一台机器上的 MySQL数据库.

连接到数据库工作正常,我可以运行一些查询没问题,但在循环中的同一点迭代结果(在第三次迭代)数据库连接关闭,我给出的错误是:

MySQL server has gone away.

当我检查服务器日志时,我看到:

Aborted connection to db <user details> (Got an error reading communication packets)

在搜索此网站以及Google之后,许多帖子建议增加几个缓冲区和超时变量:

innodb_log_buffer_size    = 32M
innodb_log_file_size      = 2047M
innodb_fast_shutdown      = 0

max_connections           = 400
connect_timeout           = 300
net_read_timeout          = 6000
net_write_timeout         = 6000
wait_timeout              = 9999999999
interactive_timeout       = 9999999999

max_allowed_packet        = 500M
net_buffer_length         = 500M

我正在迭代结果如下:

while( this->pRes->next() ) // pRes is a pointer to a sql::ResultSet instance
{

    ...

这个问题还有其他几个问题,但是对他们起作用的解决方案对我来说并不成功.这里有问题的链接:

ERROR 2006 (HY000): MySQL server has gone away

MySQL error 2006: mysql server has gone away

https://dba.stackexchange.com/questions/40899/mysql-error-reading-communication-packets

https://www.percona.com/blog/2016/05/16/mysql-got-an-error-reading-communication-packet-errors/

http://dev.mysql.com/doc/refman/5.7/en/communication-errors.html

笔记:

>关闭连接并尝试重新打开它并不能解决问题.调用sql :: Connection :: reconnect也不起作用.
>我已经为变量尝试了几个值,因为不同的帖子提示了不同的值,每次我改变一些东西来尝试它我都重新启动了服务器.
>服务器版本为5.7,MySQL Connector / C版本为1.1.7
>有更多链接指向人们发布相同问题的帖子,但通常他们只是对我列出的变量(尝试全部且无效)的不同值建议相同的内容.
>托管服务器的机器是Windows 10 Pro x64,我正在开发的机器也是Windows 10 x64.
>我的开发环境是Visual Studio 2015社区
>两台计算机上都禁用了防火墙,并且路由器上的相关tcp端口已转发到运行服务器的计算机

如果您需要更多信息,请发表评论,我会尽我所能.

解决方法

在这个问题中看不到这个问题的答案.

当我从数据库中读取时,我正在创建一个对象的实例并将结果从数据库传递给对象构造函数,在检查该对象是否是列表中的重复时,我会调用’delete’如果它是重复的,而不是将实例添加到列表中.

在对象内部,我做了一些套接字编程,并且为了保持整洁,在析构函数中调用了“WSACleanup”,大家都知道在调用’delete’时会推断出来,所以每当发现重复时’WSACleanup’是调用关闭与数据库的连接,导致我遇到的问题.

解决问题有两个答案:

>将调用移动到WSACleanup到应用程序生命周期的末尾
>每次找到重复项时,重建与数据库的整个连接

我选择了解决方案1.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读