在自定義的進(jìn)程中, 定時(shí)任務(wù)每隔15秒運(yùn)行一次,偶爾會(huì)出現(xiàn)下面錯(cuò)誤
PHP Warning: Error while sending STMT_PREPARE packet. PID=28321 in /data/www/wb/vendor/illuminate/database/Connection.php on line 458
PHP Warning: PDO::prepare(): MySQL server has gone away in /data/www/wb/vendor/illuminate/database/Connection.php on line 458
Warning: PDO::prepare(): MySQL server has gone away in /data/www/wb/vendor/illuminate/database/Connection.php on line 458
我嘗試使用一個(gè)新的自定義進(jìn)程,每隔50秒操作一次數(shù)據(jù)庫,但是沒有解決到問題,請(qǐng)問各位大佬還有什么其他辦法處理嗎?
運(yùn)行環(huán)境
Workerman version:4.0.19 PHP version:7.3.9
看下數(shù)據(jù)庫是否重啟過
建議用高版本php,這樣能用高版本 illuminate/database, 它底層有做重連
云數(shù)據(jù)庫60秒沒訪問連接會(huì)被云數(shù)據(jù)庫清理掉,所以要保證每小于60秒訪問一次數(shù)據(jù)庫?;?。
新建一個(gè)新的進(jìn)程50秒一次訪問數(shù)據(jù)庫只能?;钚碌倪M(jìn)程的數(shù)據(jù)庫連接,對(duì)任務(wù)進(jìn)程沒有效果。
所以任務(wù)進(jìn)程也需要50秒通訊一次數(shù)據(jù)庫。
我看了下數(shù)據(jù)庫的wait_timeout=3600, 不知道是不是你說的這個(gè)60秒的設(shè)置, 我先按照你說的這個(gè)試試,在每個(gè)任務(wù)進(jìn)程做一個(gè)50秒的通訊操作。
60秒清理連接不是數(shù)據(jù)庫的配置導(dǎo)致的,不是開發(fā)者能控制的,并且這個(gè)連接清理沒有fin包,應(yīng)用層無法感知到連接斷開。只能通過心跳維持。
謝謝指導(dǎo)。 我還沒有升級(jí)PHP, 但是按照你說的在任務(wù)進(jìn)程50秒通訊一次, 從昨天晚上修改后到今天, 沒有報(bào)錯(cuò)了。我今天再觀察一天,后面升級(jí)PHP8再測試。