在我的虛擬專用linux服務器上,總是有一些php作業正在運行。這些作業將數據寫入不同的表格。我想知道,如果我需要重新啓動我的MySQL服務器,我做了一些配置更改會發生什麼?如果我重新啓動我的mysql服務器,所有正在運行的作業會被終止嗎或者他們會暫停一段時間,在服務器重啓時拋出錯誤?如何重新啓動mysql服務器影響當前正在運行的作業
感謝您的幫助
在我的虛擬專用linux服務器上,總是有一些php作業正在運行。這些作業將數據寫入不同的表格。我想知道,如果我需要重新啓動我的MySQL服務器,我做了一些配置更改會發生什麼?如果我重新啓動我的mysql服務器,所有正在運行的作業會被終止嗎或者他們會暫停一段時間,在服務器重啓時拋出錯誤?如何重新啓動mysql服務器影響當前正在運行的作業
感謝您的幫助
如果你在實際的mysql php調用中添加了一些代碼,你可以捕獲錯誤並處理它們。
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作業開發的程度。
取決於它們是如何書寫的。
在所有的可能性,因爲他們是用PHP編寫的,他們將在數據庫中保存的錯誤的一個巨大的負荷,這將觸發PHP E_WARNINGs,該應用程序會完全忽略,並在其輸出文件中產生的垃圾數據,輸入無限循環或其他完全無用的行爲。
他們當然不會被殺死。然而,他們可能會死(這可能是合理的行爲,只要他們可以重新啓動並做正確的事情)。
以上片段的睡眠部分允許重新啓動MySQL服務器的時間。在這種情況下,總的等待時間將是失敗前的5分鐘。 – marklark