Mysql
 sql >> Database >  >> RDS >> Mysql

PHP Mysql PDO:errore generale:il server MySQL 2006 è andato via

Alcuni altri motivi comuni per cui il server MySQL è andato via errore sono:

  • Tu (o l'amministratore db) hai terminato il thread in esecuzione con un'istruzione KILL o un comando kill mysqladmin.

  • Hai provato a eseguire una query dopo aver chiuso la connessione al server. Ciò indica un errore logico nell'applicazione che deve essere corretto.

  • Un'applicazione client in esecuzione su un host diverso non dispone dei privilegi necessari per connettersi al server MySQL da quell'host.

  • Hai un timeout dalla connessione TCP/IP sul lato client. Questo può accadere se hai utilizzato i comandi:mysql_options(..., MYSQL_OPT_READ_TIMEOUT,...) o mysql_options(..., MYSQL_OPT_WRITE_TIMEOUT,...). In questo caso aumentare il timeout può aiutare a risolvere il problema.

  • Si è verificato un timeout lato server e la riconnessione automatica nel client è disabilitata (il flag di riconnessione nella struttura MYSQL è uguale a 0).

  • Stai utilizzando un client Windows e il server ha interrotto la connessione (probabilmente perché wait_timeout è scaduto) prima dell'emissione del comando.

  • Il problema su Windows è che in alcuni casi MySQL non riceve un errore dal sistema operativo durante la scrittura sulla connessione TCP/IP al server, ma riceve invece l'errore quando tenta di leggere la risposta dalla connessione.

  • La soluzione a questo è eseguire un mysql_ping() sulla connessione se è trascorso molto tempo dall'ultima query (questo è ciò che fa Connector/ODBC) o impostare wait_timeout sul server mysqld così in alto che in pratica non si ripete mai fuori.

  • Puoi anche ricevere questi errori se invii una query al server che è errata o troppo grande. Se mysqld riceve un pacchetto troppo grande o fuori servizio, presume che qualcosa sia andato storto con il client e chiude la connessione. Se hai bisogno di grandi query (ad esempio, se stai lavorando con grandi colonne BLOB), puoi aumentare il limite di query impostando la variabile max_allowed_packet del server, che ha un valore predefinito di 4 MB. Potrebbe anche essere necessario aumentare la dimensione massima del pacchetto sul lato client. Ulteriori informazioni sull'impostazione della dimensione del pacchetto sono fornite nella Sezione B.5.2.10, "Pacchetto troppo grande".

  • Anche un'istruzione INSERT o REPLACE che inserisce molte righe può causare questo tipo di errori. Una di queste istruzioni invia un'unica richiesta al server indipendentemente dal numero di righe da inserire; quindi, puoi spesso evitare l'errore riducendo il numero di righe inviate per INSERT o REPLACE.

  • Si perde anche la connessione se si invia un pacchetto di 16 MB o superiore se il client è precedente a 4.0.8 e il server è 4.0.8 e versioni successive, o viceversa.

  • È anche possibile visualizzare questo errore se la ricerca del nome host non riesce (ad esempio, se il server DNS su cui si basa il server o la rete non funziona). Questo perché MySQL dipende dal sistema host per la risoluzione dei nomi, ma non ha modo di sapere se sta funzionando:dal punto di vista di MySQL il problema è indistinguibile da qualsiasi altro timeout di rete.

  • Potresti anche vedere che il server MySQL è andato via errore se MySQL viene avviato con l'opzione --skip-networking.

  • Un altro problema di rete che può causare questo errore si verifica se la porta MySQL (predefinita 3306) è bloccata dal firewall, impedendo così qualsiasi connessione al server MySQL.

  • Puoi anche riscontrare questo errore con le applicazioni che eseguono il fork di processi figlio, che tentano tutte di utilizzare la stessa connessione al server MySQL. Questo può essere evitato utilizzando una connessione separata per ogni processo figlio.

  • Hai riscontrato un bug in cui il server è morto durante l'esecuzione della query.

Controlla questo link:Andato via