Cron使MySQL崩溃


8

转移到新服务器后,我每天收到一次MySQL crash [1]问题,这是我收到的电子邮件,烦人的是,其潜在的影响是。关于如何调试此问题的任何提示?

显然崩溃发生了,$schedule->save()所以我尝试用try ... catch来包装它,但这没有帮助

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}

超时设置:

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)

1
PHP失去了它与MySQL的连接。了解magento可能是因为cron.php文件需要花费几个小时才能运行。尝试查看您的MySQL超时设置...
Matt Humphrey 2013年

您可以检查mysql LOG!一旦您尝试查询该表,最有可能的mysql崩溃并重新启动
Meabed 2013年

@MattHumphrey问题是,它每天只发生一次,而cron.php每15分钟运行一次,超时已非常高
Zifius

1
我不认为这是Magento的特定问题。您要描述的是MySQL服务器上的连接超时,通常可以通过在连接上设置重新连接选项并在使用前ping服务器来恢复该超时。我将查看您的MySQL配置(my.cnf),以了解超时情况并增加超时时间。有关详细信息,请参见stackoverflow.com/questions/4284194/…
卡森(Karlson)2013年

@Zifius超时设置是什么?
卡森(Karlson)2013年

Answers:


5

正如其他人所说,这可能是由长时间运行的脚本触发的。任何需要长时间运行而不使用数据库的脚本都可能会超时。

我以前曾经发生过这种情况。我们有一个脚本连接到远程服务器,下载数百个xml文件,解析并将其转换为.csv文件,以通过内置的Magento ImportExport模块导入。我们有一个自定义的日志记录模块,它使我们能够跟踪例程中发生的情况。该类要做的第一件事就是在该日志表中添加一行以表示例程已开始。然后需要5到10分钟的时间来获取远程xml文件。下载文件后,它尝试写入另一个日志条目以表明已完成。由于自第一个日志事件以来mysql连接一直处于打开状态,并且自此之后一直未使用,因此mysql已关闭连接,因为它没有收到超过超时时间的查询。


是的,似乎是罪魁祸首,考虑到cron作业超出了保存条目的行。添加了更多日志记录以找出该工作是什么
Zifius

3

/etc/mysql/my.cnf尝试增加价值max_allowed_packet

例如。

max_allowed_packet = 256M

然后重启MySQL。


现在是64M,将尝试增加。我还看到很多“计划太迟了”。例外,必须是长时间运行的繁重工作
Zifius

根据您在其他问题中的建议,禁用了FPC爬网程序,让我们看看它的运行情况
Zifius

当我们遇到此错误时,这是​​最常见的问题原因。
davidalger

1

如果您问我,将mysql连接保持打开状态数小时不是一个好主意。因此,另一种方法是检查连接是否仍然存在,如果不存在,请打开一个新连接。


这是一个核心代码,但是,是的,您是对的:)只需要跟踪已经运行了这么长时间的工作
Zifius

也许有观察者可以用来检查连接是否存在?
Fabian Blechschmidt

我想我只需要查找并修复该工作即可:)
Zifius

根据您拥有多少商店视图,类别和产品,它可以成为索引器,这可能会花费一些时间。但是,是的,“只是解决问题”,问题
就不
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.