"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment réparer « Erreur générale : le serveur MySQL 2006 a disparu » lors de l'insertion de données ?

Comment réparer « Erreur générale : le serveur MySQL 2006 a disparu » lors de l'insertion de données ?

Publié le 2025-01-18
Parcourir:446

How to Fix \

Comment résoudre « Erreur générale : le serveur MySQL 2006 a disparu » lors de l'insertion d'enregistrements

Introduction :
L'insertion de données dans une base de données MySQL peut parfois entraîner l'erreur « Erreur générale : le serveur MySQL 2006 a disparu. » Cette erreur se produit lorsque la connexion au serveur est perdue, généralement en raison de l'une des deux variables de la configuration MySQL.

Solution :
La clé pour résoudre cette erreur est d'ajuster les variables wait_timeout et interactive_timeout. Ces variables contrôlent le temps maximum pendant lequel MySQL attendra avant de mettre fin à une connexion inactive.

Ajustement des variables de délai d'attente :

  1. Connectez-vous à la base de données en utilisant votre méthode préférée ( par exemple, PHP, console SQL).
  2. Exécutez la requête suivante : SET session wait_timeout=28800
  3. De plus, si vous rencontrez l'erreur « Erreur générale : 2013 Connexion perdue au serveur MySQL lors de la requête », vous devrez peut-être également exécuter : SET session interactive_timeout=28800
  4. Exécutez la requête suivante pour vérifier les valeurs mises à jour : SHOW VARIABLES LIKE '%timeout%'

Exemple dans PHP :

query("SHOW VARIABLES LIKE '%timeout%'", TRUE);
echo "
";
var_dump($results);
echo "
"; $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 "
";
var_dump($results);
echo "
"; 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; } } }
"; $results = $db->query("SET session wait_timeout=28800", FALSE); // MISE À JOUR - ceci est également nécessaire $results = $db->query("SET session interactive_timeout=28800", FALSE); $results = $db->query("AFFICHER LES VARIABLES COMME '%timeout%'", TRUE); echo "" ; var_dump($résultats); echo ""; base de données de classe { public $ mysqli ; fonction publique __construct() { $this->mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME); si (mysqli_connect_errno()) { sortie(); } } fonction publique __destruct() { $this->disconnect(); unset($this->mysqli); } fonction publique déconnecter() { $this->mysqli->close(); } requête de fonction ($q, $resultset) { /* crée une instruction préparée */ if (!($stmt = $this->mysqli->prepare($q))) { echo("Erreur SQL : " . $q . ' Erreur SQL # : ' . $this->mysqli->errno . ' - ' . $this->mysqli->error); renvoie faux ; } /* exécute la requête */ $stmt->exécuter(); if ($stmt->errno) { echo("Erreur SQL : " . $q . ' Erreur SQL # : ' . $stmt->errno . ' - ' . $stmt->erreur); renvoie faux ; } si ($resultset) { $result = $stmt->get_result(); pour ($set = array(); $row = $result->fetch_assoc();) { $set[] = $ligne ; } $stmt->fermer(); retourner $set ; } } }

Considérations supplémentaires :

  • La valeur par défaut de wait_timeout est de 28 800 secondes (8 heures), ce qui est excessif. Il est recommandé de le définir sur une valeur inférieure, par exemple 300 secondes.
  • L'augmentation des valeurs de délai d'attente doit être effectuée avec prudence, car cela peut entraîner des problèmes de performances si les connexions ne sont pas correctement fermées.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3