sql >> Databasteknik >  >> RDS >> Mysql

Så här löser du Allmänt fel:2006 MySQL-server har försvunnit

Jag skulle våga säga att problemet ligger i wait_timeout . Den är inställd på 30 sekunder på min delade värd och på min lokala värd är den inställd på 28800.

Jag upptäckte att jag kan ändra det för sessionen, så du kan skicka frågan:SET session wait_timeout=28800

UPPDATERA OP fastställde att han också behövde ändra variabeln interactive_timeout också. Detta kanske behövs för alla eller inte.

Koden nedan visar inställningen före och efter ändringen för att verifiera att den har ändrats.

Så ställ in wait_timeout=28800 (och interactive_timeout =28800) i början av din fråga och se om den slutförs.

Kom ihåg att infoga dina egna db-uppgifter i stället för DB_SERVER, DB_USER, DB_PASS, DB_NAME

UPPDATERA Dessutom, om detta fungerar, vill du vara tydlig med vad du gör genom att sätta wait_timeout högre. Att ställa in den på 28800 är 8 timmar och är mycket.

Följande är från denna webbplats . Det rekommenderar att du ställer in wait_timeout till 300 - vilket jag kommer att försöka rapportera tillbaka med mina resultat (efter några veckor).

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


  1. Kombinera UNION- och LIMIT-operationer i MySQL-fråga

  2. ADO.NET-leverantören 'Oracle.ManagedDataAccess.Client' är antingen inte registrerad i maskinens eller programmets konfigurationsfil eller kunde inte laddas

  3. Dela upp Datetime i ett datum och ett tidsvärde

  4. MySQL och JDBC med rewriteBatchedStatements=true