Erro geral: o servidor MySQL 2006 foi embora [fechado]

8

Este é o erro que estou recebendo de repente.

Additional uncaught exception thrown while handling exception.

Original
PDOException: SQLSTATE[70100]: Unknown error: 1317 Query execution was interrupted...my query

Additional
PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away...my query

Depois de fazer algumas pesquisas, parece que um módulo personalizado, que eu fiz, está tentando uma consulta muito grande. Uma solução que parece funcionar para muitas pessoas é a seguinte:

  1. Abra o my.ini
  2. Altere "max_allowed_packet" de "1m" para "16m" (ou maior)
  3. Salve my.ini e reinicie o MySQL

No entanto, estou em um servidor compartilhado, portanto não consigo editar o my.ini e, embora meu provedor tenha me confirmado que o valor está definido como 1M, ele não o aumentará.

Eu também tentei adicionar o seguinte: ini_set('mysqli.reconnect', 'on');a settings.php. Não resolveu o problema.

Alguém sabe de outra solução ou contorna?

Obrigado.

dbj44
fonte

Respostas:

8

As empresas de hospedagem compartilhada não concedem o privilégio SUPER . Se você o possui, pode configurar facilmente max_allowed_packet como 512M executando apenas este:

mysql> SET GLOBAL max_allowed_packet = 1024 * 1024 * 512;

Não é necessário reiniciar. Em seguida, todas as conexões de entrada a seguir poderão ter um pacote de 512M .

Você não pode fazer isso:

mysql> SET max_allowed_packet = 1024 * 1024 * 512;

porque você recebe

ERROR 1621 (HY000): SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value

A única alternativa em que consigo pensar é mudar para o Amazon EC2 e instalar o MySQL lá. Dessa forma, você pode ter liberdade para editar my.cnf / my.ini e ter o privilégio SUPER .

RolandoMySQLDBA
fonte
0

Pedi ao meu provedor que aumentasse o valor, mas não o faria. Entendo por que eles são um negócio e querem que eu pague 29,99 por mês por um servidor dedicado, em vez de 4,99 por um servidor compartilhado.

No entanto, existe uma solução: identifique a consulta que é muito grande e divida-a em duas ou mais partes. Dividi minha consulta do problema ao meio: problema resolvido. Ineficiente - sim - mas é melhor que meu site não funcione ou precise pagar o extra.

dbj44
fonte
Lembre-se do que eu disse sobre pacotes MySQL ( superuser.com/a/273833/76764 ) Os suspeitos comuns que podem entupir um pacote MySQL são grandes campos TEXT / BLOB. Portanto, você pode querer compactar seu TEXT/BLOB fieldscódigo de equipamento jerry.
RolandoMySQLDBA
Sim, talvez esse seja o problema, mas, embora minha consulta SELECT fosse relativamente complexa, o conjunto de resultados retornado era apenas algumas centenas de caracteres de texto.
dbj44
2
Você pode começar a ter problemas com as tabelas de cache que fazem INSERTs muito grandes. Sua solução não funcionará aqui ou em qualquer outro lugar em que o Drupal esteja fazendo a consulta.
mpdonadio
Não é um INSERT, apenas uma consulta SELECT com cerca de 25 junções. Tudo feito com o construtor de consultas. Você sabe por que isso causaria esse erro? Fazer o INSERT através de um manipulador de envio de formulários não é um problema.
dbj44
0

O problema é que max_allowed_packetvocê o define com maior valor.

Como corrigir esse problema (se você estiver no Windows e usando o xamp, encontre o arquivo my.ini)
Vá para xampp \ mysql \ bin
Abra o my.ini
Altere "max_allowed_packet" de "1m" para "16m".
Salve o my.ini
Agora reinicie MySql através do painel de controle do XAMPP.

Encontrei esta solução aqui. http://minorpoint.blogspot.com/2007/09/mysql-server-has-gone-away.html

Yusef
fonte