我可以在Linux上为MySQL设置不同的连接与查询超时值吗?

时间:2011-11-29 22:58:29

标签: php mysql timeout database-connection

我希望MySQL查询具有长时间超时,但初始连接超时要短。例如。如果进程无法连接3秒,则假设服务器可能过载并立即失败(而不是排队httpd连接),但如果MySQL连接快速发生,请给查询足够的时间来完成。

虽然我假设我可以通过MySQL的配置指定服务器范围的连接超时,但在PHP中配置似乎是不可能的,因为manual说,“在Linux上[{1}}]设置是也用于等待服务器的第一个答案。“

“第一个答案”是否意味着第一个查询的结果? mysql.connect_timeout是否计算?

这是否意味着SET NAMES 'utf8'适用于Linux上的所有查询?

1 个答案:

答案 0 :(得分:2)

请参阅PHP文档页面:

http://www.php.net/manual/en/mysqli.real-connect.php

示例#1

编辑1

一旦你连接到mysql,客户端会收到一个“横幅”,服务器会在其中声明他的版本和其他内容。

“在Linux上[mysql.connect_timeout]设置也用于等待服务器的第一个答案。”表示客户端使用相同的连接超时等待此“横幅通信”。

在我的测试中,我将超时设置为4秒(参见民意调查中的4000):

connect(3, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
fcntl64(3, F_SETFL, O_RDWR)             = 0
poll([{fd=3, events=POLLIN|POLLPRI}], 1, **4000**) = 1 ([{fd=3, revents=POLLIN}])
setsockopt(3, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
setsockopt(3, SOL_SOCKET, SO_SNDTIMEO, "\2003\341\1\0\0\0\0", 8) = 0
setsockopt(3, SOL_IP, IP_TOS, [8], 4)   = 0
setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
poll([{fd=3, events=POLLIN}], 1, **4000**)  = 1 ([{fd=3, revents=POLLIN}])
read(3, "4\0\0\0\n5.1.55"..., 16384) = 56

我的服务器是5.1.55版本!

简而言之: connection_timeout与查询超时无关