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

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

概述我目前正在开发一个C项目,需要连接到存储在LAN网络上另一台机器上的 MySQL数据库. 连接到数据库工作正常,我可以运行一些查询没问题,但在循环中的同一点迭代结果(在第三次迭代)数据库连接关闭,我给出的错误是: MySQL server has gone away. 当我检查服务器日志时,我看到: Aborted connection to db <user details> (Got an e 我目前正在开发一个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    = 32Minnodb_log_file_size      = 2047Minnodb_fast_shutdown      = 0max_connections           = 400connect_timeout           = 300net_read_timeout          = 6000net_write_timeout         = 6000wait_timeout              = 9999999999interactive_timeout       = 9999999999max_allowed_packet        = 500Mnet_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.

总结

以上是内存溢出为你收集整理的c – MySQL错误2006:MySQL服务器已经消失(读取通信包时出错)全部内容,希望文章能够帮你解决c – MySQL错误2006:MySQL服务器已经消失(读取通信包时出错)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1224841.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存