当我strace我的MySQL进程时,我一遍又一遍地发现相同的错误:
setsockopt(240, SOL_IP, IP_TOS, [8], 4) = -1 EOPNOTSUPP (Operation not supported)
futex(0x87ab944, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x87ab940, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
futex(0x87ab260, FUTEX_WAKE_PRIVATE, 1) = 1
select(13, [10 12], NULL, NULL, NULL) = 1 (in [12])
fcntl64(12, F_SETFL, O_RDWR|O_NONBLOCK) = 0
accept(12, {sa_family=AF_FILE, path="\246\32629iE"...}, [2]) = 803
fcntl64(12, F_SETFL, O_RDWR) = 0
getsockname(803, {sa_family=AF_FILE, path="/var/lib/mysql\1"...}, [28]) = 0
fcntl64(803, F_SETFL, O_RDONLY) = 0
fcntl64(803, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(803, F_SETFL, O_RDWR|O_NONBLOCK) = 0
setsockopt(803, SOL_IP, IP_TOS, [8], 4) = -1 EOPNOTSUPP (Operation not supported)
futex(0x87ab944, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x87ab940, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
futex(0x87ab260, FUTEX_WAKE_PRIVATE, 1) = 1
select(13, [10 12], NULL, NULL, NULL) = 1 (in [12])
fcntl64(12, F_SETFL, O_RDWR|O_NONBLOCK) = 0
accept(12, {sa_family=AF_FILE, path="\246\32629iE"...}, [2]) = 240
fcntl64(12, F_SETFL, O_RDWR) = 0
getsockname(240, {sa_family=AF_FILE, path="/var/lib/mysql\1"...}, [28]) = 0
fcntl64(240, F_SETFL, O_RDONLY) = 0
fcntl64(240, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(240, F_SETFL, O_RDWR|O_NONBLOCK) = 0
setsockopt(240, SOL_IP, IP_TOS, [8], 4) = -1 EOPNOTSUPP (Operation not supported)当我寻找运行mysql进程时,我没有发现任何异常情况。
我认为它可能在我的代码中的某个位置,所以我修改了.htaccess,以提出一个502错误,以防止它加载任何东西。错误仍然出现,只是频率较低。
有相当多的线程是这样的谈谈这个错误,但是对于如何解决这个问题却没有真正的答案。
my.conf,根据请求:
[mysqld]
#skip-networking
#log-slow-queries
#safe-show-database
#local-infile = 0
log-slow-queries = /var/log/mysql-slow.log
max_connections = 200
query_cache_limit = 128643200
key_buffer_size = 1200144000
low_priority_updates = 1
concurrent_insert = 2
thread_cache_size = 7
query_cache_size = 662144000
table_cache = 1600
table_definition_cache = 1024
long_query_time = 2.5
open_files_limit = 2647
max_connect_errors=999999999发布于 2012-03-28 03:34:12
我最初的假设是,你发布这篇文章是因为它导致了一个彻底的失败。现在明白这不是一个失败,我将解释为什么这是好的。
正如大卫所说,IP_TOS是一种为服务质量设置服务类型的呼吁。本地连接(您的my.cnf显示您必须使用的)不支持这种连接。
在用C编写代码时,系统调用几乎总是在成功或其他数字(通常为映射到常量 )时返回0。接收到这样的错误代码并不意味着发生了故障。例如,我可以通过调用文件上的stat来快速检查文件,如果文件在那里,我会得到某些结果。如果没有它,或者目录权限没有让我看到清单,我就会得到一个错误代码。这并不意味着我的申请失败了。我的意思是该文件是否在那里,这是我对代码的解释。
类似地,MySQL本质上没有失败,因为它捕获了一个代码。它没有经过检查各种事物的过程,它只是设置了TOS并忘记了它。MySQL不关心这是否不起作用,甚至可能连旗子都抓不到。不值得让执行分支检查我们是否可以或者检查它是否有效。
因此,由于它不是终结者,也不是几次重新尝试的结果,所以它并不是任何问题的一部分。
我暗示您的问题根本没有返回,并期望诊断MySQL中的一些错误。当你发问的时候,你应该解释什么是错的。当您完成调试步骤,并且没有说明原因时,我想您所展示的是事物死亡的地方。你好像什么都没犯。我建议你开始一个新的问题,告诉我们你为什么会在这里,你想要解决的实际问题是什么,而不是你关注的一个明显的症状。
发布于 2012-03-27 23:18:26
这都是正常的连接接受行为。没有迹象表明有问题。如果仔细观察,您将看到服务器调用select以找出要做什么,发现它可以accept的连接,并这样做。
对于它接受的每个连接,它都要经过一个配置过程,包括设置连接非阻塞。它试图做的事情之一是设置QoS参数。这会失败,因为此协议不支持QoS (它们都是本地连接)。所以它会继续做其他的事情。
如果你有某种问题,你的问题不知道它是什么。
https://serverfault.com/questions/374120
复制相似问题