O erro “Too many con­nec­ti­ons” ocorre quando o número máximo de conexões si­mul­tâ­neas do servidor é excedido. Cada sessão de cliente ativa utiliza uma conexão, e, uma vez atingido o limite, não é possível es­ta­be­le­cer conexões adi­ci­o­nais. As causas comuns incluem consultas paralelas ex­ces­si­vas, conexões deixadas abertas ou um valor de max_connections con­fi­gu­rado como muito baixo no servidor.

Como ocorre o erro de conexões si­mul­tâ­neas no MySQL/MariaDB

Um banco de dados só pode lidar com um número limitado de re­qui­si­ções si­mul­ta­ne­a­mente. Se este valor máximo for excedido, MySQL ou MariaDB exibirá a mensagem de erro “Too many con­nec­ti­ons”. Isso ocorre, por exemplo, quando um script PHP tenta es­ta­be­le­cer muitas conexões si­mul­tâ­neas com o banco de dados re­la­ci­o­nal. Da mesma forma, se você tiver um apli­ca­tivo web que utiliza um banco de dados MySQL, o erro pode aparecer durante uma demanda muito alta.

HiDrive Cloud Storage com a IONOS!

Baseado na Europa, o HiDrive protege seus dados em nuvem para que você possa acessá-los, com fa­ci­li­dade, de qualquer dis­po­si­tivo!

  • Altamente seguro
  • Acesso com­par­ti­lhado
  • Dis­po­ní­vel de qualquer lugar

Como corrigir o erro “Too many con­nec­ti­ons” no MySQL ou no MariaDB

Existem várias abor­da­gens para corrigir o erro “Too many con­nec­ti­ons” no MySQL. Isso vai depender do problema em questão. As soluções mais comuns são ex­pli­ca­das 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, per­mi­tindo 150 conexões regulares mais uma da conta SUPER. SUPER é um pri­vi­lé­gio do MySQL que concede direitos ad­mi­nis­tra­ti­vos 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 im­por­tan­tes:

  • A quan­ti­dade de memória RAM dis­po­ní­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 do­cu­men­ta­ção do MySQL, a maioria dos sistemas Linux pode lidar sem problemas com 500 a 1.000 conexões.

Ajustar per­ma­nen­te­mente max_connections

Para ajustar per­ma­nen­te­mente 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.cnf

Logo abaixo da primeira linha, você verá a seguinte entrada:

[mysqld]

Adicione uma nova entrada:

max_connections=[novo número máximo desejado]
plaintext

Ajustar tem­po­ra­ri­a­mente max_connections

Para mudar tem­po­ra­ri­a­mente 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 rei­ni­ci­ado.

O caminho mais rápido para o seu próprio site

Construa um site en­vol­vente em poucos minutos com o MyWebsite Now.

  • Domínio
  • E-mail
  • Bi­bli­o­teca de imagens

Solução 2: fechar conexões não uti­li­za­das

Uma causa frequente do erro “Too many con­nec­ti­ons” é quando as apli­ca­ções falham em fechar ade­qua­da­mente 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 ra­pi­da­mente atingir o limite máximo.

No PHP, sempre chame mysqli_close($connection) quando suas consultas estiverem con­cluí­das. No Python, use connection.close(), e no Node.js, chame connection.end().

Uma prática re­co­men­dada é usar pool de conexões. Com essa abordagem, um número fixo de conexões com o banco de dados é criado, ge­ren­ci­ado cen­tral­mente e reu­ti­li­zado, em vez de abrir uma nova conexão para cada so­li­ci­ta­ção. Isso ajuda a reduzir a carga do servidor e melhora o de­sem­pe­nho, já que es­ta­be­le­cer 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 per­ma­ne­cer abertas. Por padrão, o MySQL/MariaDB mantém as conexões ociosas ativas por um bom tempo, mesmo que não estejam mais exe­cu­tando 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 per­ma­ne­cem abertas antes que o servidor as feche au­to­ma­ti­ca­mente. wait_timeout se aplica a conexões padrão, enquanto interactive_timeout é usado para clientes in­te­ra­ti­vos, como o console do MySQL. Reduzir esses valores ajuda a liberar conexões “pendentes” mais ra­pi­da­mente.

Ajustar per­ma­nen­te­mente wait_timeout e interactive_timeout

O ajuste pode ser feito per­ma­nen­te­mente no arquivo de con­fi­gu­ra­çã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=120

Isso garante que as conexões inativas não bloqueiem recursos des­ne­ces­sa­ri­a­mente por muito tempo.

Ajustar tem­po­ra­ri­a­mente wait_timeout e interactive_timeout

Este ajuste também pode ser feito tem­po­ra­ri­a­mente por meio do MySQL. A alteração será aplicada apenas à conexão atual e os valores serão re­de­fi­ni­dos após reiniciar o servidor SQL.

SET GLOBAL wait_timeout=120;
SET GLOBAL interactive_timeout=120;
Ir para o menu principal