gearman 에서 worker 가 백 엔 드 에 상주 하여 MySQL server has gone away 의 해결 방법
이 원인 이 발생 한 것 은 주로 다음 과 같은 몇 가지 가 있다.
1、mysql
2、 , wait_timeout ,mysql
3、mysql kill
4、 , max_allowed_packet
5、 , wait_timeout。
프레젠테이션 의 편 의 를 위해 wait 설정timeout 시간 은 10 초 입 니 다.
> set global wait_timeout=10;
> show global variables like 'wait_timeout';
worker.php 코드 는 다음 과 같 습 니 다.
<?php
// worker
$worker = new GearmanWorker();
// job
$worker->addServer('127.0.0.1', 4730);
// ,
$worker->addFunction('longTime', function($job) {
//workload()
$data = json_decode($job->workload(), true);
$db = new mysqli('192.168.1.100', 'root', '', 'test');
if($db->connect_error) {
die('connect error');
}
// 15 , mysql wait_timeout 10
sleep(15);
// , , mysql
$ret = $db->query("INSERT INTO test VALUES(NULL, {$data['title']}, {$data['content']});");
if($ret) {
return "
";
}
});
//
// job
while($worker->work());
client.php 코드 는 다음 과 같 습 니 다.
<?php
//
$client = new GearmanClient();
// job
$client->addServer('127.0.0.1', 4730);
//doNormal
$ret = $client->doNormal('longTime', json_encode(array(
'title' => ' ',
'content' => ' ',
)));
echo $ret;
실행 결 과 는 다음 그림 과 같 습 니 다.MySQL server has gone away 상황 이 발생 했 습 니 다.일반적인 해결 방법:
1、waittimeout 의 값(권장 하지 않 음)
2.데이터 베 이 스 를 조작 할 때마다 ping()을 한 번 에 끊 으 면 다시 연결 합 니 다.
3、waittimeout 시간 간격 내 에 우 리 는 가끔 query('select 1+1')에 갑 니 다.연결 이 살아 있다 는 것 을 my sql 에 게 알려 주세요.
worker.php 코드 를 다음 과 같이 수정 합 니 다.
<?php
// worker
$worker = new GearmanWorker();
// job
$worker->addServer('127.0.0.1', 4730);
// ,
$worker->addFunction('longTime', function($job) {
//workload()
$data = json_decode($job->workload(), true);
$db = new mysqli('192.168.1.100', 'root', '', 'test');
if($db->connect_error) {
die('connect error');
}
// 15 , mysql wait_timeout 10
sleep(15);
//ini_set('mysqli.reconnect', 1);
//php ,ping ,
//$db->ping();
if(!$db->ping()) {
$db->close();
//
$db = new mysqli('192.168.1.100', 'root', '', 'test');
}
$ret = $db->query("INSERT INTO test VALUES(NULL, '{$data['title']}', '{$data['content']}');");
if($ret) {
return "
";
}
});
//
// job
while($worker->work());
실행 결 과 는 다음 과 같 습 니 다.더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Web Workers 시작Web Workers는 어떻게 생성합니까? task.js 우선 Web Workers가 무엇인지 이해해야 합니다. Web Workers는 브라우저 스크립트 처리를 다중 루틴으로 하는 규범으로 대량의 데이터 처리 시 발...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.