Erro no MySQL: muitas conexões

3

Também recebo erro de conexão no meu site a partir de hoje ...

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).

Eu acho que é um ataque, porque quando eu corro mysqltuner.pl eu recebo:

[!!] Highest connection usage: 100%  (152/151)

mas sei que tenho cerca de 500 visitas por dia. Como posso encontrar se isso é um ataque? e como posso pará-lo?

    
por Mohammad Ali Akbari 27.05.2012 / 19:49

4 respostas

2

I think its an attack, because when I run mysqltuner.pl I get

Não.

Não há nada aqui para apoiar sua hipótese. Se você não puder confirmar que esse nível de tráfego foi anormal, não terá um monitoramento adequado.

but I know I have about 500 visit per day

Para gerenciamento de capacidade, esta é uma estatística inútil. Você precisa saber quantas conexões simultâneas você tem, quanto tempo elas duram e qual a proporção delas para conteúdo estático. Você precisa começar a se perguntar por que tantas conexões estão aparecendo no banco de dados - você pode estar permitindo muitas conexões no servidor da Web.

A PRIMEIRA coisa que você precisa fazer é colocar as máquinas em funcionamento para poder responder a essas perguntas rapidamente, então você pode começar a pensar em medidas para garantir a continuidade do serviço. Para a prevenção do DOS, há muitas coisas que você faz com o iptables, usando um firewall de aplicativo ou uma ferramenta de feedback como o fail2ban é útil, mas colocar um servidor proxy reverso baseado em evento terá o maior impacto. Ajustar sua aplicação, em particular as consultas do MySQL, deve dar uma capacidade muito maior. Uma solução rápida para a capacidade é, para verificar se o seu código PHP fecha explicitamente conexões mysql - se não, então adicione um arquivo auto-precedente que chama mysql_close () via register_shutdown_function ()

    
por 28.05.2012 / 00:30
4

Provavelmente não é um ataque. Seu aplicativo está abrindo muitas conexões com o MySQL. Isso pode resultar de um DDoS (ou simplesmente de um tráfego legítimo). No entanto, é mais provável que seu aplicativo (Drupal) não esteja fechando as conexões corretamente. Pode ser que não esteja fechando (você está usando conexões "persistentes" - caso contrário, ou demorando muito para ser concluído e, portanto, muito longo antes de fechar a conexão).

    
por 27.05.2012 / 19:57
3

Você pode ler os logs e ver de onde essas conexões estão vindo no log de acesso do seu servidor web. Verifique também se o seu mysql tem conexões max altas o suficiente (veja my.cnf e verifique max_connections= ).

Se você ainda sentir que está sob ataque, você pode tentar um HIDS como o OSSEC. Ele detecta automaticamente IPs que estão fazendo muitos pedidos para serem humanos. Talvez seja necessário ajustar isso para o seu aplicativo.

    
por 27.05.2012 / 19:55
3

PDOException = seu website está solicitando muita informação.

Se o seu servidor MySQL não estiver acessível pela rede e for contatado apenas via localhost do seu servidor web, provavelmente não. Isso é mais um indicador de que seu servidor é fraco ou o MySQL está configurado incorretamente e precisa de ajuste para acompanhar o tráfego gerado pelo seu site.

Para ver se há algum ataque em seu site, você precisa consultar seus registros do servidor. A maioria das pessoas subestima o tipo de tráfego que seu site gera quando seus clientes, Google, Yahoo, Bing, Baidu e Yandex decidem vasculhar o site de uma só vez. Sim, é um evento de negação de serviço, mas não é um ataque.

Seu servidor está caindo porque não consegue lidar com o tráfego. Você precisa ler os registros de acesso do seu servidor web para determinar isso, uma ferramenta de análise como o Weblog Expert pode ajudar nesse processo. Depois de determinar as origens de tráfego, só então você pode determinar se é um tráfego mal-intencionado ou muito válido em um servidor que não consegue acompanhar.

    
por 27.05.2012 / 20:02

Tags