MariaDB 10.2.14(读取通信包超时)

MariaDB 10.2.14(读取通信包超时)

我在 MariaDB 服务器日志中看到警告消息。我尝试了很多方法。

我已经优化并修复了所有数据库,但警告仍然存在。

2018-04-19 22:50:14 139673358411520 [警告] 中止与数据库“admin_”用户“admin_”主机“localhost”的连接 473891(读取通信数据包超时)

2018-04-19 22:52:43 139672739514112 [警告] 中止与数据库“admin_”用户“admin_”主机“localhost”的连接 474608(读取通信数据包超时)

我的my.cnf

skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 500M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 8

innodb_file_per_table

max_connections=500
wait_timeout=60
interactive_timeout=60
long_query_time=5

我正在使用具有 8 GB RAM 的 CentOS 7。

有人能帮我吗?

答案1

通过阅读来解决这个问题https://mariadb.com/kb/en/library/upgrading-from-mariadb-101-to-mariadb-102/不兼容性网页。这个问题在之前的版本中就存在,因为 log_warnings 默认为 1,现在默认为 2。

动态设置全局 log_warnings=1;并观察消息几乎立即停止,重置为 2,并在 3-5 分钟内消息恢复。

这解释了为什么 10.2.14 它们只会出现,但真正的问题很可能与不当的应用程序异常处理有关。

答案2

针对 my.cnf-ini [mysqld] 部分的建议

以 # 或 REMOVE 开头以允许默认设置为您工作。.sort_buffer_size.read_buffer_size.read_rnd_buffer_size.thread_concurrency

改变这个全局变量

thread_cache_size=100  # from 8 to reduce threads_created count

答案3

您可以wait_timeout=60在设置中找到。这意味着闲置 60 秒的连接将被中止。增加该值以解决问题。

参考: https://mariadb.com/docs/reference/mdb/system-variables/wait_timeout/

答案4

我执行了一个返回多行的查询,然后使用 rows.Next()(在 Golang 中)处理这些行,并因为不相关的错误而提前退出而没有调用 rows.Close(),这时我得到了同样的错误。令人困惑的是,它在前几次成功了,但最终失败了,表明一些资源(连接?)已被耗尽。

我可以利用 Golang 的 defer 语句,只需这样做

推迟行。关闭()

在调用 rows.Next() 之前,但在每次提前退出 rows.Next() 循环之前调用 rows.Close() 也同样有效。

相关内容