
O erro ERROR 1040 (HY000): Too many connections significa que o MySQL já tem o máximo de clientes conectados, definido em max_connections (151 por padrão no MySQL 8.4 e no MariaDB). Antes de subir esse número, veja quem ocupa as conexões: quase sempre é conexão parada em Sleep ou PHP-FPM com processo demais para o banco.
O MySQL aceita uma conexão além do limite, reservada para conta com o privilégio CONNECTION_ADMIN (ou o antigo SUPER). Entre como root pelo terminal do servidor e rode:
SHOW GLOBAL STATUS WHERE Variable_name IN
('Threads_connected', 'Max_used_connections', 'Connection_errors_max_connections');
SELECT user, SUBSTRING_INDEX(host, ':', 1) AS origem, command,
COUNT(*) AS conexoes, MAX(time) AS maior_tempo
FROM information_schema.processlist
GROUP BY user, origem, command
ORDER BY conexoes DESC; O SUBSTRING_INDEX tira a porta do host, senão cada conexão TCP vira uma linha separada no agrupamento.
wait_timeout padrão é de 28800 segundos (8 horas); em site PHP sem conexão persistente, eu uso alguns minutos.pm.max_children de todos os pools que falam com esse banco; se a soma passa do max_connections, o pico esbarra no erro 1040 antes de o PHP chegar ao limite dele.SET GLOBAL wait_timeout = 300;
SET GLOBAL max_connections = 300;
SHOW VARIABLES LIKE 'open_files_limit'; O novo wait_timeout só vale para conexão aberta depois do comando. Grave os dois valores no arquivo de configuração do servidor (no Ubuntu, em /etc/mysql/mysql.conf.d/ ou /etc/mysql/mariadb.conf.d/), senão somem no restart. No MySQL 8.4, o limite efetivo é o menor entre max_connections e open_files_limit menos 810. E cada conexão reserva buffers próprios: dobrar o número sem olhar a RAM troca o erro 1040 pelo OOM killer.
Se travou nisso e precisa de ajuda, me chama aqui.
Allowed memory size exhausted no painel: qual das duas constantes do wp-config.php mexer, onde conferir o valor real e por…
strtotime com data brasileira devolve false e o INSERT quebra no MySQL 8. Use createFromFormat com getLastErrors antes de mandar…
O hash que o Magento mostra junto do erro é o nome de um arquivo em var/report. Veja como abrir,…
Seu snippet com woocommerce_checkout_fields parou de aparecer no checkout em blocos. Registre o campo pela API nova e leia o…
O pedido entrou às 21h e o relatório mostra 00h do dia seguinte. Onde setar date.timezone no PHP 8.3 e…
O pedido entra na loja e o e-mail nunca sai: antes de culpar o SMTP, veja o envio assíncrono, a…