连接到数据库工作正常,我可以运行一些查询没问题,但在循环中的同一点迭代结果(在第三次迭代)数据库连接关闭,我给出的错误是:
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服务器已经消失(读取通信包时出错)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)