Heim  >  Artikel  >  Datenbank  >  PHP-Programm MySQL-Fehler MySQL ist verschwunden

PHP-Programm MySQL-Fehler MySQL ist verschwunden

小云云
小云云Original
2018-03-14 15:49:033633Durchsuche


Dieser Artikel teilt Ihnen hauptsächlich den speicherresidenten PHP-Programm-MySQL-Fehler mit, der in der CLI-Umgebung verschwunden ist, und die Kommunikation Die TCP-Verbindungen zwischen dem Client und dem MySQL-Server sind instabil.

Die Gründe für die Instabilität können folgende sein:

  • MySQL-Server trennt die Verbindung automatisch innerhalb einer bestimmten Zeitspanne

  • PHP Wenn das Programm auf eine Leerlaufzeit stößt und längere Zeit keine MySQL-Anfragen erfolgen, unterbricht MySQL-Server auch die Verbindung, um Ressourcen zu recyceln

  • In anderen Fällen , führen Sie den Kill-Prozess im MySQL-Server aus, um eine bestimmte Verbindung zu beenden, und starten Sie den MySQL-Server neu

  • Netzwerk-Jitter

Zu diesem Zeitpunkt Die MySQL-Verbindung im PHP-Programm schlägt fehl. Wenn mysql_query weiterhin ausgeführt wird, wird ein MySQL server has gone away-Fehler gemeldet. Wenn das Programm damit nicht umgehen kann, tritt direkt ein schwerwiegender Fehler auf und es wird beendet. Daher muss das PHP-Programm die Verbindung trennen und erneut herstellen.

Lösung

mysql_ping

Viele Leute haben die mysql_ping Lösung vorgeschlagen, die darin besteht, jedes Mal eine Verbindungserkennung oder eine geplante Verbindungserkennung durchzuführen mysql_query.

Diese Lösung ist nicht die beste. Der Grund ist: mysql_ping Es muss die Verbindung aktiv erkannt werden, was zusätzlichen Verbrauch mit sich bringt. Das regelmäßige Ausführen von mysql_ping kann das Problem nicht lösen. Beispielsweise wird die Verbindung unmittelbar nach der Ausführung der mysql_ping

-Erkennung geschlossen und die Verbindung getrennt und wieder hergestellt. Das Prinzip ist:

Überprüfen Sie den Rückgabewert nach der Ausführung. Wenn

nicht zurückgegeben wird, wird

erneut ausgeführt mysql_query kehrt erfolgreich zurück, dann ist die Verbindung gültig und dies ist ein normaler Anruf. mysql_query2006/2013(这2个错误表示连接失败)Viele bekannte PHP-residente Prozess-Frameworksmysql_connectmysql_connectmysql_querymysql_queryAbfragemethode in swoole_framework.

  • Methode der Datenbankverbindungsklasse in Workererman ausführen.
$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;
        }
    }
  • Natürlich ist das Erfassen des Fehlercodes und das Trennen und erneute Verbinden eine äußerst zuverlässige und kostengünstige Lösung. Die Verwendung in einer dauerhaften Umgebung wird jedem empfohlen.

    thinkphp + phpworkman Eine ähnliche Situation tritt auf, wenn
TP+workman verwendet wird. Ab der
  protected function execute($query, $parameters = "")
    {        try {            ...
        } catch (PDOException $e) {
            // 服务端断开时重连一次            if ($e->errorInfo[1] == 2006 || $e->errorInfo[1] == 2013) {
                $this->closeConnection();
                $this->connect();            ...
        }
    }
-Version unterstützt TP den Trenn- und Wiederverbindungsmechanismus Wenn nötig,

Fügen Sie

zur Datenbankkonfigurationsdatei hinzu und alles ist in Ordnung.

V5.0.6+Verwandte Empfehlungen: application/databases.php

// 开启断线重连'break_reconnect' => true,

Das speicherresidente PHP-Programm mysql meldet einen Fehler

Das obige ist der detaillierte Inhalt vonPHP-Programm MySQL-Fehler MySQL ist verschwunden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn