web-dev-qa-db-ja.com

SQLSTATE [HY000]:一般的なエラー:2006 MySQLサーバーがcronジョブmagentoの実行中に停止しました

私はMagentoサイトで作業しており、次のエラーが発生します。

SQLSTATE[HY000]: General error: 2006 MySQL server has gone away on running 
cron job magento

このエラーは時々しか発生しません。

<?php
class Namespace_Module_Model_Observer 
{
  public function importemails(Varien_Event_Observer $observer)
  {
    echo "Hi Dear";exit();

    /* connect to gmail */
    $hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
    $username = '[email protected]';
    $password = 'mypass';

    /* try to connect */
    $inbox = imap_open($hostname,$username,$password) 
        or die('Cannot connect to Gmail: ' . imap_last_error());

    /* grab emails */
    $emails = imap_search($inbox,'ALL');

    /* if emails are returned, cycle through each... */
    if($emails) {

      /* begin output var */
      $output = '';

      /* put the newest emails on top */
      rsort($emails);

      /* for every email... */
      foreach($emails as $email_number) {

        /* get information specific to this email */
        $overview = imap_fetch_overview($inbox,$email_number,0);
        $message = imap_fetchbody($inbox,$email_number,2);

        /* output the email header information */
        $output.= 
          '<div class="toggler '.($overview[0]->seen ? 'read' : 'unread').'">';
        $output.= '<span class="subject">'.$overview[0]->subject.'</span> ';
        $output.= '<span class="from">'.$overview[0]->from.'</span>';
        $output.= '<span class="date">on '.$overview[0]->date.'</span>';
        $output.= '</div>';

        /* output the email body */
        $output.= '<div class="body">'.$message.'</div>';
      }
      echo $output;
    } 

    /* close the connection */
    imap_close($inbox);
  }  
}

このコードは数時間機能し、その後このエラーが発生します。エラーはどういう意味ですか?

12
Mahmood Rehman

DB接続にはタイムアウトがあり、接続を開いた後でクエリを送信しようとすると、このエラーが発生します。通常のシナリオは次のとおりです。

  • オープンDB接続
  • DBからデータをフェッチする
  • 何かをする、例えばメールを送信する(DB接続タイムアウトよりも時間がかかる)
  • 同じ接続を使用してクエリDB
  • エラー:MySQLサーバーが廃止されました

だから-解決策は何ですか?単にタイムアウトを増やすこともできますが、これは醜く、サイトへのトラフィックが増えると問題が発生する可能性があります。最善の解決策は、DB接続を閉じてから、次のように再度開くことです。

  • オープンDB接続
  • DBからデータをフェッチする
  • DB接続を閉じる
  • 何かをする、例えばメールを送信する(DB接続タイムアウトよりも時間がかかる)
  • 新しいDB接続を開く
  • 同じ接続を使用してクエリDB
  • DB接続を閉じる

詳細は次のとおりです。 http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

26
SlappyTheFish

タイムアウトの問題はありません。

Fclose(STDERR)行をメインファイルからインクルードファイルに移動したところ、これが発生し始めました。

SQLSTATE [HY000]:一般的なエラー:2006 MySQLサーバーが廃止されました

ラインを元の場所に戻し、問題は解消しました。

基本的に、インクルードされたファイルからSTDERRを閉じると、奇妙な影響が生じるようです。

0
Peter Smith

以前にこのエラーが発生しました。私の場合、データベースのサイズが大きすぎ、5年間のデータで18 GBを超えていたことが原因でした。

私のために機能している唯一の解決策は、それらすべてのデータをダンプして新しいデータベースを作成することでした。

0
Fadli Saad

phpshインタープリターでこのエラーが発生した場合 phpshと新しいシェルを使用してこのエラーをdoctrineマネージャーに再現できます。

SQLSTATE[HY000]: General error: 2006 MySQL server has gone away 

Phpshインタープリターでこのコマンドを使用すると、次のようになります。

php> $result = $conn->query('select psetid from psetproblems')->fetchAll();

説明:

このエラーはMySQLタイムアウトエラーです。接続を作成してから実際に使用するまでの待ち時間が長すぎるか、コマンドの1つでエラーが発生し、接続が破壊されました。最も簡単な解決策は、すべてを停止して再起動し、エラーをスローするコマンドを実行せずにすばやく実行することです。うまくいくはずです。

ソリューション

通訳を再起動します。エラーを送信せず、インタープリターを介してコマンドを発行する際の速度を上げてください。

PHPのMySQL接続のタイムアウトの長さを増やすことができます。その後、接続を作成してから使用するまでの時間を長くすることができます。

0
Eric Leschinski

共有ホスティングを使用する場合は、インデックステーブルのサイズを調べることもできます。そのため、「mysqlサーバーが削除された」可能性があるため、多くのスペースが必要になる場合があります。

0
Jenish Patel

20秒以上Magento DBで動作しないアクションがある場合(そのようなwait_timeout = 20で共有ホスティングに出会った)、DB接続を閉じる必要があります。 Magentoは、次にDBを呼び出すときに新しい接続を作成します。

    Mage::getSingleton('core/resource')->getConnection('read')->closeConnection();