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