Como corrigir o erro do MySQL: Muitas conexões

Introdução ao erro do MySQL: Muitas conexões

Quando você tem uma aplicação web (site, blog, fórum, etc.) que está em alta demanda, ou seja, um grande número de usuários a visita, isso se traduz em aumento do consumo no servidor. Se o referido aplicativo da web usa um banco de dados MySQL e as consultas são realmente muitas (devido à má programação da web ou por muitos usuários que usam a web), existe a possibilidade de que o MySQL mostre este erro:

mysqli_connect(): (HY000/1040): Too many connections

O que significa o erro MySQL: Muitas conexões?

Isso significa que muitas solicitações estão chegando ao MySQL, mais do que ele pode aceitar, mais do que pode enfileirar ou esperar.

Como resolver isso?

Simples, devemos aumentar o limite máximo de requisições (conexões) que o MySQL suporta.

Vou lhe dar duas opções para corrigir esse problema:

1. Editamos o arquivo /etc/mysql/my.cfg:

nano /etc/mysql/my.cfg

Nele colocamos o seguinte onde diz [mysql]:

max_connections = 500 max_user_connections = 500

Isso aumentará o número máximo de conexões de 100 (que é o padrão) para 500.

Nós salvamos e saímos, então reiniciamos o serviço MySQL e é isso. Essa mudança é permanente.

2. Outra forma de resolver esse problema é alterar o limite máximo para igual, mas por meio de uma consulta MySQL.

Vamos primeiro mostrar o limite atual:

mysql --user="root" --password="PASSWORD" --execute='SHOW VARIABLES LIKE "max_connections";'

Isso vai nos mostrar algo assim:

+ ----------------- + ------- + | Variable_name | Valor | + ----------------- + ------- + | max_connections | 151 + ----------------- + ------- +

Em outras palavras, o limite atual é de 151 conexões, bem, vamos aumentá-lo para 500 por meio de uma consulta:

mysql --user="root" --password="PASSWORD" --execute='SET GLOBAL max_connections = 500;'

Pronto!

O problema dessa forma é que quando o serviço é reiniciado, essa configuração é perdida.

Para compensar esse detalhe, você pode fazer um script bash que verifica a cada X período de tempo, ou até mesmo adicionar a linha ao bloco de início ou reinicialização do daemon 

Mas então por que quero conhecer essa 2ª opção? … bem, foi o que eu disse. Mas há um mês um servidor Ubuntu ignorou o método nº 1, então... em casos extremos de sistema operacional estúpido, temos esta segunda opção que funciona tão bem 