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)
my.cnf
) para ver qual é o tempo limite e aumentá-lo. Consulte stackoverflow.com/questions/4284194/… para obter detalhes.Respostas:
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.
fonte
Na sua
/etc/mysql/my.cnf
tentativa de aumentar o valor paramax_allowed_packet
Por exemplo.
Então reinicie o MySQL.
fonte
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.
fonte