Erro geral do banco de dados: o servidor MySQL 2006 foi embora

24

Recentemente, comecei a receber um erro toda vez que tento adicionar um conteúdo, independentemente do tipo. Este é o erro que aparece no navegador:

Exceção não capturada adicional lançada ao manipular exceção.

PDOException original: SQLSTATE [HY000]: Erro geral: o servidor MySQL 2006 foi desativado: SELECT COUNT (cid) FROM {comment} WHERE status =: status; Matriz ([: status] => 0) em comment_count_unpublished () (linha 313 de /Applications/MAMP/htdocs/modules/comment/comment.module).

Adicional

PDOException: SQLSTATE [HY000]: Erro geral: o servidor MySQL 2006 foi encerrado: INSERT INTO {watchdog} (uid, tipo, mensagem, variáveis, severidade, link, local, referenciador, nome do host, registro de data e hora) VALUES (: db_insert_placeholder_0,: db_insert_placeholder_1 ,: db_insert_placeholder_2,: db_insert_placeholder_3,: db_insert_placeholder_4,: db_insert_placeholder_5,: db_insert_placeholder_6,: db_insert_placeholder_7,: db_insert_placeholder_8,: db_insert_placeholder_9; Matriz ([: db_insert_placeholder_0] => 1 [: db_insert_placeholder_1] => php [: db_insert_placeholder_2] =>% type:! Message na% function (linha% linha do% file). [: Db_insert_placeholder_3] => a: 6: { s: 5: "% type"; s: 12: "PDOException"; s: 8: "! message"; s: 154: "SQLSTATE [HY000]: Erro geral: 2006 o servidor MySQL foi desativado: SELECIONE A CONTAGEM (cid) FROM {comment} WHERE status =: status; Matriz ([: status] = & gt; 0) "; s: 9:"% function "; s: 27:" comment_count_unpublished () "; s: 5:"% file "; s: 56:" / Applications / MAMP /htdocs/modules/comment/comment.module";s:5:"%line";i:313;s:14:"severity_level";i:3;} [: db_insert_placeholder_4] => 3 [: db_insert_placeholder_5] = > [: db_insert_placeholder_6] =>http: // localhost: 8888 /? q = nó% 2Fadd% 2Farcade-project & amp ; [: db_insert_placeholder_7] => http: // localhost: 8888 / [: db_insert_placeholder_8] => 127.0.0.1 [: db_insert_placeholder_9] => 1338336955) em dblog_watchdog () (linha 154 de / Aplicativos / MAMP / htdocs / modules / dblog / dblog.module).

Eu também recebo o seguinte erro no meu arquivo de erro php:

Erro fatal do PHP: exceção não capturada 'PDOException' com a mensagem 'SQLSTATE [HY000]: Erro geral: o servidor MySQL 2006 foi desativado' em /Applications/MAMP/htdocs/includes/database/database.inc:2136

Rastreio de pilha:
0 /Applications/MAMP/htdocs/includes/database/database.inc(2136): PDOStatement-> execute (Array)
1 /Applications/MAMP/htdocs/includes/database/database.inc(664): DatabaseStatementBase- > execute (Matriz, Matriz)
2 /Applications/MAMP/htdocs/includes/database/database.inc(2315): DatabaseConnection-> query ('SELECT expirar, ...', Matriz, Matriz)
3 / Applications / MAMP / htdocs / includes / lock.inc (167): db_query ('SELECT expire, ...', Array)
4 /Applications/MAMP/htdocs/includes/lock.inc(146): lock_may_be_available ('theme_registry: ...' )
5 /Applications/MAMP/htdocs/includes/theme.inc(447): lock_acquire ('theme_registry: ...')
6 /Applications/MAMP/htdocs/includes/bootstrap.inc(427): ThemeRegistry-> set ( Matriz)
7 [função interna]: DrupalCacheArray -> __ destruct ()
8 {main} lançada em /Applications/MAMP/htdocs/includes/database/database.inc na linha 2136

Estou com problemas para decifrar essas mensagens de erro. Alguém poderia me ajudar a entender o que está acontecendo aqui?

Mike2012
fonte

Respostas:

31

9 vezes em 10 esse erro é causado por uma max_allowed_packetconfiguração insuficientemente grande no arquivo my.cnf do servidor MySQL.

O padrão padrão para o MAMP na minha experiência é 1M, o que geralmente não é suficiente para o Drupal (especialmente considerando o tamanho de algumas das seqüências de cache que ele gera).

Tente aumentar essa configuração gradualmente para ver se o erro desaparece. Tenho certeza de que uma pesquisa rápida no Google mostrará como fazer isso no MAMP.

Clive
fonte
Felizmente, meu caso não se enquadrava na categoria de 1 vez em 10. Suas recomendações funcionaram como um encanto! Obrigado!
Mike2012
Enfrentando o mesmo erro no Windows. Configurou apache, mysql e php pilha localmente ... por favor, guia
Prerit Mohan
E no caso de hospedagem compartilhada, o que posso fazer?
Mohammed amina Bourkadi
Entre em contato com o seu host, peça para fazer a alteração. Se eles não puderem / não quiserem, você precisa decidir se esse host é o ideal para você @mohammedaminebourkadi.
Clive
6

Este erro do MySQL / MariaDB:

Erro: 2006 ( CR_SERVER_GONE_ERROR) - servidor MySQL foi embora

significa basicamente que o cliente não pôde enviar uma pergunta ao servidor .

Isso pode acontecer por falha temporária, consulta SQL muito grande ou inválida, configuração incorreta do servidor ou limitação do provedor de hospedagem.

Em geral, esse erro pode ser resultado de várias coisas, como:

  • uma consulta ao servidor está incorreta ou muito grande,

    Solução: Aumente a max_allowed_packetvariável .

    Nota: Verifique se a variável está na [mysqld]seção, não [mysql].

    Nota: Não esqueça de reiniciar o servidor MySQL / MariaDB.

  • Você recebeu um tempo limite da conexão TCP / IP no lado do cliente.

    Solução: Aumente a wait_timeoutvariável .

  • Você tentou executar uma consulta após o fechamento da conexão com o servidor.

    Solução: Um erro lógico no aplicativo deve ser corrigido.

  • Falha na pesquisa do nome do host (por exemplo, problema no servidor DNS) ou o servidor foi iniciado com a --skip-networkingopção

    Outra possibilidade é que seu firewall bloqueie a porta MySQL (por exemplo, 3306 por padrão).

  • O encadeamento em execução foi interrompido, portanto, tente novamente.

  • Você encontrou um erro em que o servidor morreu durante a execução da consulta.

  • Um cliente executando em um host diferente não possui os privilégios necessários para se conectar.

  • E muito mais, então aprenda mais em: B.5.2.9 O servidor MySQL foi embora .

Para mais detalhes, verifique seu MySQL ou logs do sistema (por exemplo /var/log/messages).

Para depurar o servidor ou cliente MySQL, verifique: 26.5 Depurando e portando o MySQL .


Caso esteja tentando importar o banco de dados do arquivo usando drushou mysqlcomando, você pode:

  • Adicione uma opção de força ( -f) para mysqlprosseguir e executar o restante das consultas.

    Isso é útil se o banco de dados tiver algumas consultas grandes relacionadas ao cache, que são grandes, mas que não são relevantes de qualquer maneira.

    Usando drush, tente:cat foo.sql | $(drush sqlconnect) -f

  • Tente aplicar a --max-allowed-packetopção mysqlcom valores menores.

  • Aumente max_allowed_packetewait_timeout na configuração do seu servidor (por exemplo ~/.my.cnf).

  • Despejar o banco de dados original novamente usando a --skip-extended-insertopção para dividir as consultas grandes. Em seguida, importe o arquivo novamente.


Veja também: ERRO 2006 (HY000): O servidor MySQL foi embora

kenorb
fonte
3

A resposta que o @Clive dá normalmente é o caso, mas pode haver uma causa adicional, especialmente nos formulários de adição de nó.

Os formulários de adição de nó geralmente são grandes e o processamento deles pode usar muita memória (especialmente se houver algum processamento de imagem durante o salvamento, como nos módulos de corte). Se o servidor ficar sem memória, o processo mysqld pode ser eliminado, o que resulta na mesma mensagem "foi embora".

A pista é procurar nos logs do servidor. Em uma máquina CentOS, você pode ver a seguinte entrada em / var / log / messages

1 de janeiro de 00:00:00 kernel do servername: Memória insuficiente: Kill process XXXX (mysqld) marca XXX ou sacrifica filho
1 de janeiro de 00:00:00 kernel do servername: processo matou XXXX, UID XX, (mysqld) total-vm: XXXkB , anon-rss: XXXkB, arquivo-rss: XXkB

A solução aqui é adicionar mais RAM ou adicionar / aumentar a troca.

mpdonadio
fonte