【问题标题】:Mysql thread connected is 1-3 but experienced too many connectionsMysql线程连接是1-3但是连接太多
【发布时间】:2016-04-19 08:20:40
【问题描述】:

昨天我在日志中看到,在 1 分钟的时间跨度内,有很多 mysql 错误,连接失败太多。我正在运行默认设置:max_connections 为 151,之前没有遇到过这种情况。

检查当前状态时,我的线程连接数最多只有 1 个,最多 3 个。

我应该增加我的 max_connections 还是我只是暂时遭受 DDoS 攻击?

注意:它会自行解决并在那一分钟后立即工作。

更新 2:它又发生了。我可以在错误日志的几秒钟内看到多个错误。为什么会这样?

【问题讨论】:

  • 你没有提到事情是如何连接到你的 mySQL 的 - 许多 php/perl 类型的连接人们建立连接但一旦完成就不要关闭它,或者把它留给 php/perl 来关闭它因此,“稍后”发生,您可能会得到比预期更高的打开连接负载,因为它们尚未关闭
  • 我最近启用了multi_accept 可以做些什么吗?为我的 nginx 配置?
  • @BugFinder 在检查 SHOW STATUS WHERE variable_name LIKE "Threads_%" -> Threads_Running 时我不应该能够看到连接吗?我在整个应用程序中连接一次 mysqli。
  • show processlist 通常很有用。是每个应用实例一个还是仅来自您的服务器一个?
  • 仅来自我的服务器的一个@BugFinder

标签: mysql


【解决方案1】:

max_connect_errors 减少到例如 100。这是针对黑客的小保护。

Threads_running 始终至少为1,因为它包含您的SHOW

对于max_connections = 151Max_used_connections = 152 表示有 151 个用户连接进入,另外还有一个“额外”连接被允许和使用。因此,不要root(或任何其他SUPER用户)身份运行您的应用程序。

GRANT ... ON your_database.* ...,而不是 ... ON *.* ... 用于任何应用程序登录。这严重减慢了黑客访问mysql 数据库的速度。

root 应该只允许来自localhost。这是另一项安全措施。

如果您的网络服务器有“访问”日志,请查看它。您可能会连续看到数百个外观相似的黑客攻击。而且你可能经常有类似的一组。

请务必转义来自 html 表单的任何数据。在构建INSERTs 时执行此操作。没有这个,你就很容易受到攻击。

附录

SELECT user, host FROM mysql.user WHERE Super_priv = 'Y';

会告诉你谁有SUPER。首先,它应该只包括localhost127.0.0.1::1host 值,所有这些实际上都是本地主机。这并不能阻止黑客首先入侵客户端,该客户端也可能位于本地主机上。

这可能会以另一种方式列出那些:

SELECT user, host FROM mysql.user WHERE Grant_priv = 'Y';

回到问题

Web 服务器(nginx 的?)对连接数的限制应该小于 MySQL 的max_connections。这将阻止黑客(和用户)在门口,而不是让他们阻塞网络服务器和 MySQL。

即使在运行良好的系统上,20 也是允许同时进入 Web 服务器的合理最大值。如果还有更多,那么他们可能会互相绊倒;最好让少数人获得他们需要的所有资源,而不是因为争夺资源而花费更长的时间。

【讨论】:

  • max_connect_errors 只有 10。root 只允许来自 localhost/local ip。对于我的应用程序使用的其他用户,我从 . 更改为 database.*。这些是 root/SUPER 是因为它们对特定数据库具有 GRANT ALL PRIVILEGIES 吗?
  • 不,SUPER 不包含在 ON db.* 中。稍后见附录。
  • 添加了更多内容——“回到问题所在”是基于对 Apache 和 MySQL 的高限制导致平静的系统突然崩溃的经验。随叫随到的人只能重新启动。 (不是一张漂亮的照片。)这听起来像你的症状。
  • 我最近把webserver(nginx)改成了multi_accept on;这意味着同时接受多个连接 - 我认为这就是原因。
  • 但是很好的安全提示!
猜你喜欢
  • 2016-12-05
  • 1970-01-01
  • 2017-12-27
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
相关资源
最近更新 更多