c – MySQL错误2006:MySQL服务器已经消失(读取通信包时出错)
我目前正在开发一个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也不起作用. 如果您需要更多信息,请发表评论,我会尽我所能. 解决方法
在这个问题中看不到这个问题的答案.
当我从数据库中读取时,我正在创建一个对象的实例并将结果从数据库传递给对象构造函数,在检查该对象是否是列表中的重复时,我会调用’delete’如果它是重复的,而不是将实例添加到列表中. 在对象内部,我做了一些套接字编程,并且为了保持整洁,在析构函数中调用了“WSACleanup”,大家都知道在调用’delete’时会推断出来,所以每当发现重复时’WSACleanup’是调用关闭与数据库的连接,导致我遇到的问题. 解决问题有两个答案: >将调用移动到WSACleanup到应用程序生命周期的末尾 我选择了解决方案1. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |