私は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);
}
}
このコードは数時間機能し、その後このエラーが発生します。エラーはどういう意味ですか?
DB接続にはタイムアウトがあり、接続を開いた後でクエリを送信しようとすると、このエラーが発生します。通常のシナリオは次のとおりです。
だから-解決策は何ですか?単にタイムアウトを増やすこともできますが、これは醜く、サイトへのトラフィックが増えると問題が発生する可能性があります。最善の解決策は、DB接続を閉じてから、次のように再度開くことです。
詳細は次のとおりです。 http://dev.mysql.com/doc/refman/5.0/en/gone-away.html
タイムアウトの問題はありません。
Fclose(STDERR)行をメインファイルからインクルードファイルに移動したところ、これが発生し始めました。
SQLSTATE [HY000]:一般的なエラー:2006 MySQLサーバーが廃止されました
ラインを元の場所に戻し、問題は解消しました。
基本的に、インクルードされたファイルからSTDERRを閉じると、奇妙な影響が生じるようです。
以前にこのエラーが発生しました。私の場合、データベースのサイズが大きすぎ、5年間のデータで18 GBを超えていたことが原因でした。
私のために機能している唯一の解決策は、それらすべてのデータをダンプして新しいデータベースを作成することでした。
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接続のタイムアウトの長さを増やすことができます。その後、接続を作成してから使用するまでの時間を長くすることができます。
共有ホスティングを使用する場合は、インデックステーブルのサイズを調べることもできます。そのため、「mysqlサーバーが削除された」可能性があるため、多くのスペースが必要になる場合があります。
20秒以上Magento DBで動作しないアクションがある場合(そのようなwait_timeout = 20で共有ホスティングに出会った)、DB接続を閉じる必要があります。 Magentoは、次にDBを呼び出すときに新しい接続を作成します。
Mage::getSingleton('core/resource')->getConnection('read')->closeConnection();