私の仮想専用Linuxサーバーでは、常にいくつかのphpジョブが実行されています。これらのジョブは、さまざまなテーブルにデータを書き込み続けます。設定を変更したので、mysqlサーバーを再起動する必要がある場合はどうなりますか?mysqlサーバーを再起動すると、実行中のすべてのジョブが強制終了されますか?または、サーバーの再起動中にエラーが発生して、しばらく保留になりますか?
ご協力いただきありがとうございます
それらのphpジョブがどれだけうまく書かれているかによります。接続が再確立されるまでデータを保持するか、メールが失敗して「助けを求める」か、トランザクションロジックが使用されなかったために、データが混乱した状態でひどく失敗する可能性があります。
可能な限り最高の結果を得ることができますが、最悪の場合は、それらのphpジョブがどれだけうまく開発されたかに完全に依存します。
実際のmysqlphp呼び出しの周りに少しコードを置くと、エラーをキャッチして処理できます。
function mquery( $qry, $lnk ) {
global $dbl; # your pre-established database link
$result = mysql_query( $qry, $lnk );
if ( $result === false ) {
$error_msg = mysql_error( $lnk );
while ( $result === false && @$i < 25 ) {
$i++;
$error_no = mysql_errno( $lnk );
if ( $error_no == 1054 || # "MySQL Error #1054: Unknown column..."
$error_no == 1064 || # "You have an error in your SQL syntax" - MAC - May 30, 2012
$error_no == 1065 ) { # "Query was empty"
break; # don't loop on errors - it will not succeed
}
else if ( $error_no == 1205 || # SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
$error_no == 1213 ) { # "Deadlock found when trying to get lock; try restarting transaction"
sleep( $i ); # try sleeping a bit longer to get past the deadlock
}
else if ( $error_no == 2003 || # SQLSTATE[HY000] [2003] Can't connect to MySQL server
$error_no == 2006 || # "MySQL server has gone away" -- reconnect
$error_no == 2013 ) { # SQLSTATE[HY000] [2013] Lost connection to MySQL server at 'reading authorization packet', system error: 0
sleep( $i );
if ( $lnk == $dbl ) { # you may have multiple database links...
get_dbl(); # re-establish your database link
$lnk = $dbl;
}
}
else {
sleep( 1 ); # keeps us from sleeping too long on other errors
}
$result = mysql_query( $qry, $lnk );
}
echo "\n<!-- MySQL Error #$error_no: '$error_msg' (tried $i times) -->\n";
}
return $result;
}//mqueryを終了します
しばらく待つと成功する可能性のある他のエラーがある場合は、それらを追加します。
どれだけ待っても成功しないエラーの場合は、コードの「break」ブロックに追加します。
それらがどのように書かれたかによります。
おそらく、PHPで記述されているため、データベースに大量のエラーが発生し、PHP E_WARNINGがトリガーされます。これにより、アプリケーションは完全に無視して出力ファイルにジャンクデータを生成し、無限ループに入ります。または他の完全に役に立たない振る舞い。
彼らは確かに殺されることはありません。ただし、それらは死ぬ可能性があります(再起動して正しいことを実行できる場合は、これは妥当な動作である可能性があります)。