cronがMySQLをクラッシュさせる


8

新しいサーバーに移動した後、MySQLクラッシュ[1]の問題が1日に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
これは、MySQLとの接続を失うPHPです。magentoを知っているのは、おそらくcron.phpファイルの実行に時間がかかるためです。MySQLのタイムアウト設定を確認してみてください
Matt Humphrey、

mysql LOGを確認してください。そのテーブルをクエリしようとすると、mysqlがクラッシュして再起動する可能性が最も高い
2013

@MattHumphreyの問題は、cron.phpが15分ごとに実行されている間、1日に1回だけ発生し、タイムアウトはすでにかなり高くなっています
Zifius

1
これはMagento固有の質問ではないと思います。あなたが説明しているのは、MySQLサーバーの接続タイムアウトです。これは通常、接続に再接続オプションを設定し、使用前にサーバーにpingを実行することで復元されます。私はあなたのMySQL設定(my.cnf)を見て、タイムアウトとは何かを確認し、それを増やします。詳細については、stackoverflow.com / questions / 4284194 /…をご覧ください。
Karlson 2013

@Zifiusタイムアウト設定とは何ですか?
カールソン2013

回答:


5

他の人が言ったように、それはおそらく長時間実行されているスクリプトによって引き起こされます。データベースを使用せずに実行に時間がかかるスクリプトは、タイムアウトになる可能性があります。

私はこれを以前に経験したことがあります。リモートサーバーに接続し、数百のxmlファイルをダウンロードして解析し、組み込みのMagento ImportExportモジュールを介してインポートするための.csvファイルに変換するスクリプトがあります。カスタムロギングモジュールを使用すると、ルーチンで何が起こったかを追跡できます。クラスが最初に行うことは、ルーチンが開始したことを示すために、このログテーブルに行を追加することです。その後、リモートxmlファイルをフェッチするのに5〜10分かかります。ファイルをダウンロードした後、それは別のログエントリを書き込もうとして、それが終了したことを伝えようとします。mysql接続は最初のログイベント以降開いており、それ以降使用されていないため、タイムアウト期間を超えてクエリを受信しなかったため、mysqlは接続を閉じました。


ええ、cronジョブがエントリを保存する境界より上で実行されていることを考慮に入れている犯人のようです。どのジョブがそれであるかを見つけるためにログを追加しました
Zifius

3

あなたの/etc/mysql/my.cnf試みで価値を増やしますmax_allowed_packet

例えば。

max_allowed_packet = 256M

次にMySQLを再起動します。


現在は64Mですが、増加してみます。「スケジュールが遅すぎます」もたくさん見かけます。例外、重い仕事が長すぎる
Zifius

他の質問であなたの推奨に従ってFPCクローラーを無効にして、それがどうなるか見てみましょう
Zifius

これは、このエラーが発生したときに最も頻繁に発生する問題の原因です。
davidalger 2013

1

私に尋ねた場合、mysql接続を何時間も開いたままにしておくことはお勧めできません。したがって、代替策は、チェックするために、接続がまだ存在するかどうか、存在しない場合は、新しい接続を開くことです。


これはコアコードですが、そうです、そうです:)とても長く実行されているジョブを追跡する必要があるだけです
Zifius

おそらく、接続が存在するかどうかを確認するために使用できるオブザーバーがいますか?
Fabian Blechschmidt 2013

私はその仕事を見つけて修正する必要があるだけだと思います:)
Zifius

ストアビュー、カテゴリ、および商品の数によっては、インデクサーになる可能性があり、これには時間がかかる場合があります。しかし、はい、「ジョブを修正するだけ」で問題は解決しました:D
Fabian Blechschmidt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.