Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So lösen Sie den allgemeinen Fehler:2006 MySQL-Server ist verschwunden

Ich wage zu sagen, dass das Problem bei wait_timeout liegt . Auf meinem Shared Host ist sie auf 30 Sekunden eingestellt und auf meinem Localhost auf 28800.

Ich habe festgestellt, dass ich es für die Sitzung ändern kann, sodass Sie die Abfrage ausgeben können:SET session wait_timeout=28800

AKTUALISIEREN Das OP stellte fest, dass er auch die Variable interactive_timeout ändern musste auch. Dies kann für jeden erforderlich sein oder auch nicht.

Der folgende Code zeigt die Einstellung vor und nach der Änderung, um zu bestätigen, dass sie geändert wurde.

Setzen Sie also am Anfang Ihrer Abfrage wait_timeout=28800 (und interactive_timeout =28800) und prüfen Sie, ob sie abgeschlossen ist.

Denken Sie daran, Ihre eigenen db-Anmeldeinformationen anstelle von DB_SERVER, DB_USER, DB_PASS, DB_NAME einzufügen

AKTUALISIEREN Wenn dies funktioniert, sollten Sie sich darüber im Klaren sein, was Sie tun, indem Sie wait_timeout höher setzen. Die Einstellung auf 28800 dauert 8 Stunden und ist viel.

Das Folgende stammt von dieser Website . Es wird empfohlen, wait_timeout auf 300 zu setzen - was ich versuchen und mit meinen Ergebnissen zurückmelden werde (nach ein paar Wochen).

<?php

$db = new db();

$results = $db->query("SHOW VARIABLES LIKE '%timeout%'", TRUE);
echo "<pre>";
var_dump($results);
echo "</pre>";

$results = $db->query("SET session wait_timeout=28800", FALSE);
// UPDATE - this is also needed
$results = $db->query("SET session interactive_timeout=28800", FALSE);

$results = $db->query("SHOW VARIABLES LIKE '%timeout%'", TRUE);
echo "<pre>";
var_dump($results);
echo "</pre>";


class db {

    public $mysqli;

    public function __construct() {
        $this->mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
        if (mysqli_connect_errno()) {
            exit();
        }
    }

    public function __destruct() {
        $this->disconnect();
        unset($this->mysqli);
    }

    public function disconnect() {
        $this->mysqli->close();
    }

    function query($q, $resultset) {

        /* create a prepared statement */
        if (!($stmt = $this->mysqli->prepare($q))) {
            echo("Sql Error: " . $q . ' Sql error #: ' . $this->mysqli->errno . ' - ' . $this->mysqli->error);
            return false;
        }

        /* execute query */
        $stmt->execute();

        if ($stmt->errno) {
            echo("Sql Error: " . $q . ' Sql error #: ' . $stmt->errno . ' - ' . $stmt->error);
            return false;
        }
        if ($resultset) {
            $result = $stmt->get_result();
            for ($set = array(); $row = $result->fetch_assoc();) {
            $set[] = $row;
            }
            $stmt->close();
            return $set;
        }
    }
}