이 기사에서는 주로 mysql이 사라졌음을 보고하는 메모리 상주 PHP 프로그램 mysql 오류를 공유합니다. CLI 환경에서 PHP 프로그램은 오랫동안 실행되어야 하며 클라이언트와 클라이언트 간의 TCP 연결이 필요합니다. MySQL 서버가 불안정합니다.
불안정한 이유는 다음과 같습니다:
MySQL-Server는 특정 기간 내에 자동으로 연결을 끊습니다.
PHP 프로그램이 유휴 기간에 직면하고 MySQL 쿼리가 없는 경우 오랜 시간이 지나면 MySQL-Server는 리소스를 재활용하기 위해 연결도 끊습니다.
다른 경우에는 MySQL 서버에서 종료 프로세스를 실행하여 특정 연결을 종료하면 MySQL 서버가 다시 시작됩니다
네트워크 지터
이때 PHP 프로그램에서 MySQL 연결이 무효화됩니다. mysql_query가 계속 실행되면 MySQL 서버가 사라졌습니다
라는 오류가 보고됩니다. 프로그램이 이를 처리할 수 없으면 곧바로 치명적인 오류가 발생하고 종료됩니다. 따라서 PHP 프로그램은 연결을 끊었다가 다시 연결해야 합니다. MySQL server has gone away
的错误。程序处理不到就直接遇到致命错误并退出了。所以PHP程序中需要断线重连。
有很多人提出了mysql_ping
的方案,每次mysql_query
进行连接检测或者定时连接检测。
这个方案不是最好的。原因是:mysql_ping
需要主动侦测连接,带来了额外的消耗。定时执行mysql_ping
不能解决问题,如刚刚执行过mysql_ping
检测之后,连接就关闭了;
它的原理是:mysql_query
执行后检测返回值,如果mysql_query
返回失败,检测错误码发现为2006/2013(这2个错误表示连接失败)
,再执行一次mysql_connect
执行mysql_connect
后,重新执行mysql_query
如果mysql_query
返回成功,那么连接是有效的,这是一次正常的调用。
swoole_framework中query方法。
$res = mysql_query($sql, $this->conn);if ($res === false) { if (mysql_errno($this->conn) == 2006 or mysql_errno($this->conn) == 2013) { $r = $this->checkConnection(); if ($r === true) { continue; } }
workerman中数据库连接类execute方法。
protected function execute($query, $parameters = "") { try { ... } catch (PDOException $e) { // 服务端断开时重连一次 if ($e->errorInfo[1] == 2006 || $e->errorInfo[1] == 2013) { $this->closeConnection(); $this->connect(); ... } }
很明显捕获错误码,进行断线重连,是高可靠低消耗的方案,推荐大家在常驻环境里使用。
TP+workman也会出现类似的情况,TP从 V5.0.6+
版本开始,支持Mysql的断线重连机制,默认关闭,需要的话,在application/databases.php
mysql_ping
의 솔루션을 제안했는데, mysql_query
가 연결 감지 또는 타이밍 연결을 수행할 때마다 발각. 이 솔루션은 최고가 아닙니다. 그 이유는 mysql_ping
이 연결을 적극적으로 감지해야 하므로 추가 소비가 발생하기 때문입니다. mysql_ping
을 정기적으로 실행해도 문제를 해결할 수 없습니다. 예를 들어, mysql_ping
테스트만 실행한 후에는 연결이 닫힙니다.
mysql_query
는 실행 후 반환 값을 감지합니다. mysql_query
가 반환에 실패하면 오류 코드는 2006/2013( 이 두 가지 오류는 연결 실패를 나타냅니다.
, mysql_connect
를 실행한 후 mysql_query인 경우 <code>mysql_query
를 다시 실행하세요. 가 성공을 반환하면 연결이 유효하며 이는 정상적인 호출입니다. // 开启断线重连'break_reconnect' => true,🎜🎜🎜workerman에서 데이터베이스 연결 클래스의 메서드를 실행합니다. 🎜🎜🎜rrreee🎜오류 코드를 캡처하고 연결을 끊었다가 다시 연결하는 것은 당연합니다. 신뢰성이 높고 비용이 저렴한 솔루션이므로 영구적인 환경에서 사용하는 것이 좋습니다. 🎜
V5.0.6+
버전부터 TP는 Mysql의 연결 해제 및 재연결 메커니즘을 지원하며 꺼져 있습니다. 기본적으로 필요한 경우 application/databases.php
데이터베이스 구성 파일에 🎜rrreee🎜를 추가하면 문제가 없습니다. 🎜🎜관련 권장 사항: 🎜🎜🎜🎜메모리 상주 PHP 프로그램 mysql 오류 보고🎜🎜위 내용은 PHP 프로그램 mysql 오류 mysql이 사라졌습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!