Maison >base de données >tutoriel mysql >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 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-29 11:25:30298parcourir

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 pendant 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 en PHP :

<code class="php"><?php

$db = new db();

$results = $db->query("SHOW VARIABLES LIKE '%timeout%'", TRUE);
echo "<pre class="brush:php;toolbar:false">";
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; } } }

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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn