Magento MySQL foi embora Erro

14

Estou tendo um monte de problemas estranhos no Magento CE 1.7.0.2. Durante as operações normais, o site ocasionalmente produz uma página de erro do Magento ( houve um erro ao processar sua solicitação ) no front-end e no back-end. Vendo o relatório associado, vejo a seguinte mensagem:

"SQLSTATE[HY000] [2006] MySQL server has gone away"

Às vezes, mas mais raramente, a mensagem do relatório será exibida:

 Connection reset by peer

Eu olhei para o var> log> system.log e o MySQL has gone awayerro é acompanhado pelo seguinte:

Warning: PDO::__construct(): MySQL server has gone away  in /var/www/html/domain.com/live/lib/Zend/Db/Adapter/Pdo/Abstract.php on line 129
Error while reading greeting packet. PID=1863  in /var/www/html/domain.com/live/lib/Zend/Db/Adapter/Pdo/Abstract.php on line 129

Além disso, o seguinte erro parece estar acontecendo em todas as solicitações, bem como nos MySQL has gone awayerros:

 Warning: include(File.php): failed to open stream: No such file or directory  in /var/www/html/domain.com/live/lib/Varien/Autoload.php on line 93
 Warning: include(): Failed opening 'File.php' for inclusion

Procurei na maioria dos artigos que encontrei sobre isso e mexi nos parâmetros do banco de dados até as vacas chegarem em casa, mas o erro permanece.

Depois de seguir outro QnA sobre o compilador, percebo que a página de administração Sistema> Ferramentas> Compilação está completamente em branco. Eu acho que todos esses erros estão relacionados, mas qualquer insight sobre depuração ou causas seria muito útil.

Peço desculpas se isso é incoerente; Estou acordado há cerca de 42 horas, por isso, peça esclarecimentos. Obrigado.

- atualização -

Minha pilha de servidores para maior clareza:

PHP 5.5.4 (PHP-FPM)
Nginx 1.4.2
MySQL 5.5.33

- atualização -

Ocorre-me (depois de um sono) que eu nunca especifiquei - a base de código PHP e o MySQL db estão em servidores de hardware separados - muito importante saber se vocês vão me ajudar! Peço desculpas.

Jongosi
fonte
1
Você está usando conexões de banco de dados persistentes? Nesse caso, tente desativá-los. Eu também verificaria os logs do mysql para ver se há erros ou se está realmente reiniciando ou apenas a conexão sendo descartada.
Davidalger 7/10
Thx David, seguindo os logs do MySQL e o DB nunca é atingido quando o erro ocorre. Eu estava usando conexões persistentes, desabilitar não ajudou :(
Jongosi 07/10
1
Você já considerou que a conexão está ruim. Uma causa desse erro é que o banco de dados nunca recebeu a mensagem. Tente depurar usando as informações de conexão do local.xml para chamar funções mysqli. Veja o que acontece.
SH-
obrigado, parecia ter fixado o meu problema editando o arquivo local

Respostas:

9

Isso se deve principalmente a qualquer um dos dois motivos abaixo

  1. O tempo limite do servidor expirou e fechou a conexão.
    correção: tente aumentar a wait_timeoutvariável no my.cnf/my.ini arquivo de configuração do seu mysqld .
  2. O servidor descartou um pacote incorreto ou muito grande.
    correção: aumente o limite máximo do tamanho do pacote aumentando o valor de max_allowed_packetno my.cnf/my.ini arquivo.

Verifique os arquivos se você estiver tentando obter algo que está demorando muito ou não é aplicável.

Anshu Mishra
fonte
Thx Anshu, estou seguindo o log de consultas do MySQL e o banco de dados nunca é atingido com uma solicitação. Além disso, se eu reiniciar o servidor, um erro poderá ocorrer algumas vezes dentro de 20 segundos após o servidor estar online - muito curto para que as configurações padrão atinjam o tempo limite. I definir max_allowed_packeta 2G e wait_timoutde 86400, ainda sem ajuda.
Jongosi # 7/13
Por favor, verifique se a conexão do banco de dados é adequada, verificar o seu app / arquivo / etc local.xml
Anshu Mishra
Thx Anshu, sim, é correto - Ligação acontece cerca de 68% dos pedidos
Jongosi
6

Problema resolvido! Obrigado a todos pela ajuda. Esse foi um problema de firewall de hardware com o host da Web, mesmo depois que eles foram desativados por nós.

Conforme confirmado pela equipe de servidores da 1 & 1 , os firewalls de hardware foram configurados corretamente, mas interceptavam incorretamente o tráfego válido entre o servidor de arquivos e o servidor db em cerca de 25% do tempo.

Em vez disso, configuramos o iptables e encerramos completamente os firewalls de hardware. 100% de disponibilidade agora.

Jongosi
fonte
2
Oh meu! Firewall esporádico ... tenho que amar esse tipo de problema. Fico feliz por você ter resolvido isto. :)
davidalger
O mesmo problema aqui e parece que sua solução funcionará para nós também. Vou falar 1 e 1 também. O suporte ajudou de alguma forma? Posso entrar em contato com você? Twitter? Facebook? Por favor, veja meu perfil para mais detalhes. Obrigado
webDEVILopers
2

Eu experimentei o mesmo problema no Magento 2.1 e meu log de erros do mysql mostrou o seguinte erro várias vezes durante o processo "O MySQL se foi":

...[Warning] File Descriptor 1228 exceeded FD_SETSIZE=1024

Para potencialmente resolver esse problema, verifique primeiro o open filesvalor com $ ulimit -n, que no meu caso era 256.

Em segundo lugar, adicione table_open_cache = {that ulimit -n value}na [mysqld]seção em seu my.cnf.

Agora reinicie o MySQL e espero que você esteja de volta à ação.

Nota: Estou executando o Magento 2.1 localmente no OS X El Capitan com PHP 7.1 e MySQL 5.7.15 com Homebrew. Mas aposto que essa solução também funcionaria em configurações antigas ou diferentes.


fonte
1

Edite o arquivo app / etc / local.xml na pasta Magento, substituindo a entrada do host por '127.0.0.1' em vez de 'localhost'.

broc
fonte
O banco de dados está em um servidor de hardware separado, portanto o endereço IP do servidor MySQL é usado.
Jongosi
1

Ocorreu o mesmo erro ao migrar um banco de dados grande entre 2 servidores.

Adicionar temporariamente o seguinte no arquivo de configuração do mysql (/etc/mysql/my.cnf) no meu servidor local (de destino) e reiniciar o mysql (service mysql restart) corrigiu o problema para mim:

max_allowed_packet      = 160M
wait_timeout            = 28800000
Michael
fonte