Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment résoudre l'erreur générale :le serveur MySQL 2006 a disparu

Je me risquerais à dire que le problème est avec wait_timeout . Il est défini sur 30 secondes sur mon hôte partagé et sur mon hôte local est défini sur 28800.

J'ai découvert que je pouvais le changer pour la session, vous pouvez donc émettre la requête :SET session wait_timeout=28800

MISE À JOUR L'OP a déterminé qu'il devait également modifier la variable interactive_timeout aussi bien. Cela peut être nécessaire ou non pour tout le monde.

Le code ci-dessous montre le paramètre avant et après la modification pour vérifier qu'il a été modifié.

Donc, définissez wait_timeout=28800 (et interactive_timeout =28800) au début de votre requête et voyez si elle se termine.

N'oubliez pas d'insérer vos propres informations d'identification db à la place de DB_SERVER, DB_USER, DB_PASS, DB_NAME

MISE À JOUR De plus, si cela fonctionne, vous voulez être clair sur ce que vous faites en définissant wait_timeout plus haut. Le fixer à 28800 correspond à 8 heures et c'est beaucoup.

Ce qui suit provient de ce site . Il recommande de définir wait_timeout sur 300 - que j'essaierai de rendre compte de mes résultats (après quelques semaines).

<?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;
        }
    }
}