Como corrigir o erro “Too many connections” no MySQL/MariaDB
O erro “Too many connections” ocorre quando o número máximo de conexões simultâneas do servidor é excedido. Cada sessão de cliente ativa utiliza uma conexão, e, uma vez atingido o limite, não é possível estabelecer conexões adicionais. As causas comuns incluem consultas paralelas excessivas, conexões deixadas abertas ou um valor de max_connections configurado como muito baixo no servidor.
Como ocorre o erro de conexões simultâneas no MySQL/MariaDB
Um banco de dados só pode lidar com um número limitado de requisições simultaneamente. Se este valor máximo for excedido, MySQL ou MariaDB exibirá a mensagem de erro “Too many connections”. Isso ocorre, por exemplo, quando um script PHP tenta estabelecer muitas conexões simultâneas com o banco de dados relacional. Da mesma forma, se você tiver um aplicativo web que utiliza um banco de dados MySQL, o erro pode aparecer durante uma demanda muito alta.
Baseado na Europa, o HiDrive protege seus dados em nuvem para que você possa acessá-los, com facilidade, de qualquer dispositivo!
- Altamente seguro
- Acesso compartilhado
- Disponível de qualquer lugar
Como corrigir o erro “Too many connections” no MySQL ou no MariaDB
Existem várias abordagens para corrigir o erro “Too many connections” no MySQL. Isso vai depender do problema em questão. As soluções mais comuns são explicadas em detalhes abaixo.
Solução 1: escolher um novo número máximo de conexões
A variável do sistema max_connections determina o número de conexões que o MySQL/MariaDB aceitará. O valor padrão é de 151 conexões, permitindo 150 conexões regulares mais uma da conta SUPER. SUPER é um privilégio do MySQL que concede direitos administrativos ao usuário.
Comece decidindo o novo valor máximo que deseja definir para max_connections. Ao aumentar o número de conexões MySQL/MariaDB, tenha em mente vários fatores importantes:
- A quantidade de memória RAM disponível
- Quanto de RAM cada conexão consome (consultas simples requerem menos RAM do que as complexas)
- O tempo de resposta aceitável
De acordo com a documentação do MySQL, a maioria dos sistemas Linux pode lidar sem problemas com 500 a 1.000 conexões.
Ajustar permanentemente max_connections
Para ajustar permanentemente a variável max_connections, você precisa atualizar o arquivo my.cnf ou my.ini.
Abra o arquivo /etc/my.cnf para edição com o comando:
sudo nano /etc/my.cnfLogo abaixo da primeira linha, você verá a seguinte entrada:
[mysqld]Adicione uma nova entrada:
max_connections=[novo número máximo desejado]plaintextAjustar temporariamente max_connections
Para mudar temporariamente o número máximo de conexões para a sessão atual, você pode executar o seguinte comando no console do MySQL:
SET GLOBAL max_connections = [novo número máximo desejado];O ajuste permanece em vigor até que o servidor SQL seja reiniciado.
Construa um site envolvente em poucos minutos com o MyWebsite Now.
- Domínio
- Biblioteca de imagens
Solução 2: fechar conexões não utilizadas
Uma causa frequente do erro “Too many connections” é quando as aplicações falham em fechar adequadamente as conexões com o banco de dados. Cada conexão aberta ocupa um slot no MySQL ou MariaDB, e se as conexões não forem liberadas, o servidor pode rapidamente atingir o limite máximo.
No PHP, sempre chame mysqli_close($connection) quando suas consultas estiverem concluídas. No Python, use connection.close(), e no Node.js, chame connection.end().
Uma prática recomendada é usar pool de conexões. Com essa abordagem, um número fixo de conexões com o banco de dados é criado, gerenciado centralmente e reutilizado, em vez de abrir uma nova conexão para cada solicitação. Isso ajuda a reduzir a carga do servidor e melhora o desempenho, já que estabelecer e fechar conexões consome tempo extra.
Solução 3: ajustar o tempo limite de conexão
Outra forma eficaz de prevenir o erro é limitando o tempo que conexões inativas podem permanecer abertas. Por padrão, o MySQL/MariaDB mantém as conexões ociosas ativas por um bom tempo, mesmo que não estejam mais executando consultas. Cada uma dessas conexões ociosas ainda consome um slot.
As variáveis de sistema wait_timeout e interactive_timeout controlam por quanto tempo as conexões inativas permanecem abertas antes que o servidor as feche automaticamente. wait_timeout se aplica a conexões padrão, enquanto interactive_timeout é usado para clientes interativos, como o console do MySQL. Reduzir esses valores ajuda a liberar conexões “pendentes” mais rapidamente.
Ajustar permanentemente wait_timeout e interactive_timeout
O ajuste pode ser feito permanentemente no arquivo de configuração my.cnf ou my.ini. Para isso, abra-o e procure a seguinte entrada:
[mysqld]Insira as seguintes linhas:
wait_timeout=120
interactive_timeout=120Isso garante que as conexões inativas não bloqueiem recursos desnecessariamente por muito tempo.
Ajustar temporariamente wait_timeout e interactive_timeout
Este ajuste também pode ser feito temporariamente por meio do MySQL. A alteração será aplicada apenas à conexão atual e os valores serão redefinidos após reiniciar o servidor SQL.
SET GLOBAL wait_timeout=120;
SET GLOBAL interactive_timeout=120;
