gpt4 book ai didi

c++ - MySQL 错误 2006 : MySQL server has gone away (Got an error reading communication packets)

转载 作者:可可西里 更新时间:2023-11-01 07:43:51 25 4
gpt4 key购买 nike

我目前正在开发一个 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 Community

  • 两台机器都关闭了防火墙,路由器上相关的tcp端口已经转发到运行服务器的机器

如果您需要更多信息,请发表评论,我会尽力提供。

最佳答案

此问题的答案在问题中不可见。

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

在对象内部,我做了一些套接字编程,为了保持整洁,在析构函数中调用了“WSACleanup”,众所周知,这是在调用“删除”时推断出来的,所以每当发现重复项时“依次调用 WSACleanup 关闭与数据库的连接,导致我遇到的问题。

解决这个问题有两个答案:

  1. 将对 WSACleanup 的调用移到应用程序生命周期的末尾

  2. 每次发现重复时重建与数据库的整个连接

我选择了解决方案 1。

关于c++ - MySQL 错误 2006 : MySQL server has gone away (Got an error reading communication packets),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38129761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com