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

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-20 18:42:13

问题


I am working on Magento site and I get this error:

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

I only get this error sometimes.

<?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 = 'myid@gmail.com';
    $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);
  }  
}

This code works for several hours then it gives this error. What does the error mean?


回答1:


DB Connections have a timeout which will cause this error if you try to send a query sometime after opening the connection. The usual scenario is:

  • Open DB connection
  • Fetch some data from DB
  • Do stuff, e.g. send emails (takes time longer than DB connection timeout)
  • Query DB using same connection
  • Error: MySQL server has gone away

So - what's the solution? You could simply increase the timeout, but that's ugly and could cause problems when traffic to your site increases. The best solution would be to close your DB connection and then re-open it like this:

  • Open DB connection
  • Fetch some data from DB
  • Close DB connection
  • Do stuff, e.g. send emails (takes time longer than DB connection timeout)
  • Open new DB connection
  • Query DB using same connection
  • Close DB connection

Here's more information: http://dev.mysql.com/doc/refman/5.0/en/gone-away.html




回答2:


If you got this error with the phpsh interpreter. I am able to reproduce this error with phpsh and a new shell to doctrine manager.

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

With this command in the phpsh interpreter:

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

Explanation:

This error is the MySQL timeout error. Either you waited too long in between creating your connection and then actually using it, or you made an error with one of your commands and you ruined the connection. The simplest solution is to stop, restart everything and don't run the command that throws an error, and do it quickly. It should work.

Solution

Restart your interpreter. Don't submit errors and be faster in issuing your commands through your interpreter.

You could increase the timeout length of your MySQL connection for PHP. Then you can wait longer between creating a connection, then using it.




回答3:


I don't have any timeout issues.

I moved a fclose(STDERR) line from my main file to a included file and this started happening.

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

I moved the line back to its original place and problem went away.

Basically, closing STDERR from an included file seems to have some crazy repercussions.




回答4:


You may also look into index table size when using shared hosting. It may take much space because of that also you may get "mysql server gone away".




回答5:


I've encountered this error before. For my case it was due the database size is too large, more than 18gb for 5 years data.

The only solution that is working for me was to dump all those data and create a new database.




回答6:


If you have any actions which do not operate with Magento DB for more than 20 seconds (I met shared hosting with such wait_timeout=20), you have to close DB connection. Magento will create new connection on next call to DB.

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


来源:https://stackoverflow.com/questions/18486023/sqlstatehy000-general-error-2006-mysql-server-has-gone-away-on-running-cron

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!