从今天我的网站上也出现连接错误…
PDOException: SQLSTATE[08004] [1040] Too many connections in lock_may_be_available() (line 167 of /home/sevensibir/domains/7sib.ir/public_html/includes/lock.inc).
我认为它是一个攻击,因为当我运行mysqltuner.pl我得到:
[!!] Highest connection usage: 100% (152/151)
但我知道我每天约有500次访问。 如果这是一次攻击,我怎么能发现。 我该如何阻止呢?
我认为它是一个攻击,因为当我运行mysqltuner.pl我得到
没有。
这里没有什么可以支持你的假设。 如果你不能确认这个交通水平是不正常的,那么你没有得到适当的监督。
但我知道我每天约有500次访问
对于容量pipe理来说,这是一个无用的统计量。 你需要知道你有多less个并发连接,它们持续了多长时间,以及它们中静态内容的比例是多less。 当你需要开始问自己为什么这么多的连接出现在数据库时 – 你可能会在Web服务器上允许太多的连接。
你需要做的第一件事就是设置一些机制来快速回答这些问题,然后你就可以开始思考如何确保服务的连续性了。 对于DOS预防,你使用iptables做了很多事情,使用应用程序防火墙或反馈工具(如fail2ban)是有帮助的,但是放置基于事件的反向proxt服务器将产生最大的影响。 调整您的应用程序,特别是MySQL查询应该提供更大的容量。 容量的一个快速修复是检查你的PHP代码是否明确地closures了mysql连接 – 如果没有,那么添加一个自动prepend文件,通过register_shutdown_function()调用mysql_close()
可能不是攻击。 你的应用程序打开了太多的连接到MySQL。 这可能是由于DDoS(或者只是大量的合法stream量)造成的。 但是,更有可能的是,您的应用程序(Drupal)没有正确closures连接。 这可能是因为它没有closures它们(你是否使用“持久”连接?如果不是这样),或者只是花了很长时间才能完成,因此在closures连接之前太长了。
您可以读取日志,并查看这些连接来自您的networking服务器的访问日志的位置。 还要确保你的mysql有足够高的最大连接数(见my.cnf和检查max_connections= )。
如果你仍然觉得自己受到攻击,你可以试试OSSEC这样的HIDS。 它会自动检测出太多请求是人类的IP。 您可能需要为您的应用程序进行微调。
PDOException =您的网站需要大量的信息。
如果你的MySQL服务器无法从networking访问,只能通过本地主机从你的Web服务器联系,那么可能不是。 这更像是你的服务器动力不足或者MySQLconfiguration错误,需要调整以跟上你网站产生的stream量。
要查看您的网站是否有任何攻击,您需要咨询您的服务器日志。 当他们的客户,Google,Yahoo,Bing,百度和Yandex决定一次冲洗他们的网站时,大多数人低估了他们的网站产生什么样的stream量。 是的,这是一个拒绝服务事件,但不是攻击。
您的服务器宕了,因为它无法处理stream量。 您需要通读您的Web服务器访问日志来确定这一点,像Weblog Expert这样的分析工具可以在这个过程中提供帮助。 一旦确定了stream量来源,只有这样才能确定服务器上的恶意stream量或过多的有效stream量是否跟不上。