当我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)
Run Code Online (Sandbox Code Playgroud)
当我寻找正在运行的 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
Run Code Online (Sandbox Code Playgroud)
我最初的假设是您发布此信息是因为它导致了完全失败。现在明白这不是失败,我将解释为什么这是可以的。
正如大卫所说,IP_TOS 是为服务质量提供设置服务类型的调用。本地连接(您的 my.cnf 显示您必须使用)不支持。
在用 C 编写代码时,系统调用几乎总是在成功时返回 0 或其他数字,通常映射到一个常量。收到这样的错误代码并不意味着发生了故障。例如,我可以通过调用一个文件来快速检查stat
它,如果它在那里,我会得到某些结果。如果它不存在或目录权限不允许我看到列表,我会收到错误代码。这并不意味着我的申请失败了。我的意思是该文件是否存在是我对代码的解释。
类似地,MySQL 本质上也不是因为它捕获了代码而失败。它没有经过检查各种事情的过程,它只是设置了 TOS 并忘记了它。MySQL 不在乎这是否不起作用,甚至可能没有抓住标志。执行分支检查我们是否可以或检查它是否有效是不值得的。
因此,由于它不是终端,也不是在使事情正常工作的过程中多次重试的结果,因此它不是任何问题的一部分。
我暗示您的问题根本没有返回,并且希望诊断 MySQL 中的一些错误。当你发布一个问题时,你应该解释什么是错误的。当您完成调试步骤而您没有说明原因时,我假设您所展示的是事情消失的地方。看来你从无到有犯了错误。我建议你提出一个新问题并告诉我们你为什么在这里以及你试图解决的实际问题是什么,而不是你已经集中注意力的明显症状。
归档时间: |
|
查看次数: |
6447 次 |
最近记录: |