我在 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() 也同样有效。