Cron trava o MySQL

8

Depois de mudar para um novo servidor, estou recebendo o problema de travamento do MySQL [1] uma vez por dia, que chega ao meu email e é irritante, sem mencionar o impacto potencial. Alguma dica sobre como depurar esse problema?

Obviamente falha acontece, $schedule->save()então eu tentei envolvê-lo com uma tentativa ... pegar, mas isso não ajudou

SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
Trace:
#0 /var/www/vhosts/site/store/lib/Zend/Db/Adapter/Pdo/Abstract.php(305): PDO->beginTransaction()
#1 /var/www/vhosts/site/store/lib/Zend/Db/Adapter/Abstract.php(495): Zend_Db_Adapter_Pdo_Abstract->_beginTransaction()
#2 /var/www/vhosts/site/store/lib/Varien/Db/Adapter/Pdo/Mysql.php(219): Zend_Db_Adapter_Abstract->beginTransaction()
#3 /var/www/vhosts/site/store/app/code/core/Mage/Core/Model/Resource/Abstract.php(76): Varien_Db_Adapter_Pdo_Mysql->beginTransaction()
#4 /var/www/vhosts/site/store/app/code/core/Mage/Core/Model/Abstract.php(313): Mage_Core_Model_Resource_Abstract->beginTransaction()
#5 /var/www/vhosts/site/store/app/code/core/Mage/Cron/Model/Observer.php(125): Mage_Core_Model_Abstract->save()
#6 /var/www/vhosts/site/store/app/code/core/Mage/Core/Model/App.php(1338): Mage_Cron_Model_Observer->dispatch(Object(Varien_Event_Observer))
#7 /var/www/vhosts/site/store/app/code/core/Mage/Core/Model/App.php(1317): Mage_Core_Model_App->_callObserverMethod(Object(Mage_Cron_Model_Observer), 'dispatch', Object(Varien_Event_Observer))
#8 /var/www/vhosts/site/store/app/Mage.php(447): Mage_Core_Model_App->dispatchEvent('default', Array)
#9 /var/www/vhosts/site/store/cron.php(46): Mage::dispatchEvent('default')
#10
{main}

Configurações de tempo limite:

mysql> show global variables like '%timeout%';
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| connect_timeout            | 10       |
| delayed_insert_timeout     | 300      |
| innodb_lock_wait_timeout   | 50       |
| innodb_rollback_on_timeout | OFF      |
| interactive_timeout        | 30       |
| lock_wait_timeout          | 31536000 |
| net_read_timeout           | 30       |
| net_write_timeout          | 60       |
| slave_net_timeout          | 3600     |
| wait_timeout               | 3600     |
+----------------------------+----------+
10 rows in set (0.00 sec)
Zifius
fonte
11
Isto é PHP perdendo sua conexão com o MySQL. Conhecendo o magento é provavelmente porque o arquivo cron.php está demorando horas para ser executado. Tente olhar para suas configurações MySQL tempo limite ...
Matt Humphrey
Você pode verificar o mysql LOG! mais mysql provável deixar de funcionar e reiniciar uma vez que você tenta consulta que mesa
Meabed
Problema @MattHumphrey é que isso está acontecendo apenas uma vez por dia, enquanto cron.php passa a cada 15 minutos, o tempo limite já são bastante elevados
Zifius
11
Eu não acho que essa seja uma pergunta específica do Magento. O que você está descrevendo é um tempo limite de conexão em um servidor MySQL, que normalmente é restaurado definindo uma opção de reconexão na conexão e executando ping no servidor antes do uso. Eu examinaria sua configuração do MySQL ( my.cnf) para ver qual é o tempo limite e aumentá-lo. Consulte stackoverflow.com/questions/4284194/… para obter detalhes.
Karlson 11/02
@Zifius Quais são as configurações de tempo limite?
11133 Karlson

Respostas:

5

Como outros já disseram, provavelmente é acionado por um script de longa duração. Qualquer script que leva muito tempo para ser executado sem usar o banco de dados pode atingir o tempo limite.

Eu já tive isso antes. Temos um script que se conecta a um servidor remoto, baixa algumas centenas de arquivos xml, analisa e os converte em um arquivo .csv para importação através do módulo Magento ImportExport incorporado. Temos um módulo de registro personalizado, que nos permite rastrear o que aconteceu com nossas rotinas. A primeira coisa que a classe faz é adicionar uma linha a esta tabela de log para dizer que a rotina foi iniciada. Em seguida, são necessários de 5 a 10 minutos para buscar os arquivos xml remotos. Depois de baixar os arquivos, ele tenta escrever outra entrada de log para dizer que está concluída. Como a conexão mysql está aberta desde o primeiro evento de log e não foi usada desde então, o mysql fechou a conexão porque não recebeu nenhuma consulta por mais tempo que o período de tempo limite.

Peter O'Callaghan
fonte
Sim, parece ser o culpado, considerando que os trabalhos do cron são executados acima da linha que salva a entrada. Mais logging adicionado para descobrir qual trabalho é que
Zifius
3

Na sua /etc/mysql/my.cnftentativa de aumentar o valor paramax_allowed_packet

Por exemplo.

max_allowed_packet = 256M

Então reinicie o MySQL.

Ben Lessani - Sonassi
fonte
No momento, está na 64M, tentará aumentar. Também vejo muitos "Tarde demais para a programação". exceções, deve ser algum trabalho pesado correndo muito longo
Zifius
FPC desativado rastreador como por sua recomendação em outra pergunta, vamos ver como vai ser
Zifius
Essa é a causa mais frequente do problema quando encontramos esse erro.
davidalger
1

Se você me perguntar, não é uma boa ideia manter uma conexão mysql aberta por horas. Portanto, a alternativa é verificar se a conexão ainda existe, se não, abrir uma nova.

Fabian Blechschmidt
fonte
É um código central, mas sim, você está certo :) Só preciso rastrear o trabalho que está demorando tanto tempo agora
Zifius
talvez exista um observador que você possa usar para verificar se a conexão existe?
Fabian Blechschmidt
Acho que só precisa encontrar e corrigir esse trabalho :)
Zifius
Dependendo da quantidade de visualizações de loja, categorias e produtos que você possui, ele pode ser um indexador e isso pode levar algum tempo. Mas sim, "apenas conserte o trabalho" e o problema se foi: D
Fabian Blechschmidt