2

在运行使用 MySQL C API 的 D 编程时,我遇到了一个有趣的线程问题。我收到错误 2013“在查询期间丢失与 MySQL 服务器的连接”。当足够多的线程淹没网络接口缓冲区时,似乎会出现此问题,但服务器仍有更多要传输的内容。这是我基于一些研究并在两台不同的计算机上运行程序的最佳猜测。一台计算机与服务器具有 100Mb 连接,另一台具有 1Gb 连接。具有 100Mb 连接的计算机会引发错误,而 1Gb 计算机则不会。我想知道我是否遇到了 MySQL 文档中如何编写线程客户端的第一段中描述的内容。如果是,我需要用 SIGPIPE 做什么,我该怎么做?

对于那些感兴趣的人,我会在调用任何库之前调用 mysql_library_init,并且我正在使用 mysql_init 和 mysql_real_connect 为每个线程创建一个新的 MYSQL*。另外值得注意的是,我正在执行的查询是小型 SELECT,每个查询仅返回几千条记录,并且所有查询都是从同一个表中执行的。

4

1 回答 1

0

请在 mysql_real_connect 之前试试这个:

my_bool myb = 1;
mysql_options(conn, mysql_option.MYSQL_OPT_RECONNECT, &myb);

也请检查这个mysql故障排除页面: http ://dev.mysql.com/doc/refman/5.5/en/gone-away.html

于 2012-06-05T21:05:47.037 回答