mysql reconnect flag_mysql - MySQL重新连接标志值是什么意思? - 堆栈内存溢出

我的代码看起来很像这样,只有错误处理(不会被触发)。 它在多线程应用程序中调用(每个需要连接的线程一次),在Ubuntu 13.10.1上使用MySQL 5.5.37-0:

DBConnection = mysql_init(NULL);

mysql_options((MYSQL *) DBConnection, MYSQL_SET_CHARSET_NAME, "utf8");

mysql_real_connect(DBConnection, ...);

my_bool reconnect = true;

mysql_options(DBConnection, MYSQL_OPT_RECONNECT, &reconnect);

mysql_query(DBConnection, "SET wait_timeout=60"); //!!!

printf("reconnect flag %d", DBConnection->reconnect);

我已经断开断开连接超时,所以我可以测试重新连接代码(1分钟而不是默认的8小时)。 编辑:我在每个页面的 real_connect之后设置_RECONNECT选项,因为它对我来说更可靠。

在mysql.h中,相关代码说:

my_bool reconnect; /* set to 1 if automatic reconnect */

“重新连接”字段的值似乎是随机的。 从上面的日志中抓取值我看到:100,104,106,108,108,38,43,56,59,63,64,88,92,98

这似乎没有记录, 相关页面只是说:

MYSQL此结构表示一个数据库连接的句柄。 它几乎用于所有MySQL功能。 不要试图复制MYSQL结构。 无法保证此类副本可用。

在MySQL 5.0.19之前,即使MYSQL结构中的重新连接标志等于1,

不管我是否使用上面的mysql_options()调用来设置它,我认为我从未见过它实际设置为1。 有谁知道这意味着什么,以及它对实际价值是否有任何意义?

重新连接一段时间后,我一直在追逐一些奇怪的行为,我想知道这是否与它有关(有时自动重新连接失败,但手动断开连接并重新连接工作)。

我已经交换了订单并使用了mysql_options而不是SQL,并且没有对“never 0或1”结果进行可见的更改。 新代码:

DBConnection = mysql_init(NULL);

mysql_options((MYSQL *) DBConnection, MYSQL_SET_CHARSET_NAME, "utf8");

my_bool reconnect = true;

mysql_options(DBConnection, MYSQL_OPT_RECONNECT, &reconnect);

mysql_options(DBConnection, MYSQL_OPT_CONNECT_TIMEOUT, "60");

mysql_real_connect(DBConnection, ...);

printf("reconnect flag %d", DBConnection->reconnect);

同样的结果,但似乎你的确切值会有所不同(我的评论下面使用了不同的运行并得到了不同的值)。 用30个线程启动我的代码:101,101,101,106,109,112,112,115,117,118,120,123,47,56,56,59,62,68,80,81, 81,88,88,88,90,91,91,92,93,94,96(从日志文件中获取这些内容的简单方法是对其进行排序,因此排序不是最初的排序)。 主要的是它不是“1”,正如手册所说的那样。 并且位0并不总是设置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值