In generale l'errore:
Errore: 2006 ( CR_SERVER_GONE_ERROR
) - Il server MySQL è andato via
significa che il client non è stato in grado di inviare una domanda al server .
mysql
importare
Nel tuo caso specifico durante l'importazione del file di database tramite mysql
, ciò molto probabilmente significa che alcune delle query nel file SQL sono troppo grandi per essere importate e non possono essere eseguite sul server, quindi il client non riesce al primo errore.
Quindi hai le seguenti possibilità:
Aggiungi force force option ( -f
) per mysql
procedere ed eseguire il resto delle query.
Ciò è utile se il database ha alcune query di grandi dimensioni relative alla cache che non sono comunque rilevanti.
Aumenta max_allowed_packet
ewait_timeout
nella configurazione del tuo server (ad es ~/.my.cnf
.).
Scaricare il database utilizzando l' --skip-extended-insert
opzione per suddividere le query di grandi dimensioni. Quindi importalo di nuovo.
Prova ad applicare l' --max-allowed-packet
opzione per mysql
.
Ragioni comuni
In generale questo errore potrebbe significare diverse cose, come:
una query sul server non è corretta o è troppo grande,
Soluzione: aumentare la max_allowed_packet
variabile .
Assicurati che la variabile sia nella [mysqld]
sezione, no [mysql]
.
Non abbiate paura di usare grandi numeri per i test (come 1G
).
Non dimenticare di riavviare il server MySQL / MariaDB.
Ricontrolla il valore impostato correttamente:
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
Hai ottenuto un timeout dalla connessione TCP / IP sul lato client.
Soluzione: aumentare la wait_timeout
variabile .
Si è tentato di eseguire una query dopo aver chiuso la connessione al server.
Soluzione: è necessario correggere un errore logico nell'applicazione.
La ricerca del nome host non è riuscita (ad es. Problema del server DNS) o il server è stato avviato con l' --skip-networking
opzione.
Un'altra possibilità è che il firewall blocchi la porta MySQL (ad esempio 3306 per impostazione predefinita).
Il thread in esecuzione è stato eliminato, quindi riprovare.
Si è verificato un errore in cui il server è morto durante l'esecuzione della query.
Un client in esecuzione su un host diverso non dispone dei privilegi necessari per connettersi.
E molti altri, quindi scopri di più su: B.5.2.9 Il server MySQL è andato via .
Debug
Ecco alcune idee di debug a livello di esperti:
Controllare i registri, ad es
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
Metti alla prova la tua connessione tramite mysql
, telnet
o le funzioni ping (ad esempio mysql_ping
in PHP).
Utilizzare tcpdump
per annusare la comunicazione MySQL (non funzionerà per la connessione socket), ad esempio:
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
Su Linux, usa strace
. Su BSD / Mac utilizzare dtrace
/ dtruss
, ad es
sudo dtruss -a -fn mysqld 2>&1
Vedi: Introduzione a DTracing MySQL
Ulteriori informazioni su come eseguire il debug del server o client MySQL su: 26.5 Debug e porting di MySQL .
Per riferimento, controlla il codice sorgente nel sql-common/client.c
file responsabile per generare l' CR_SERVER_GONE_ERROR
errore per il comando client.
MYSQL_TRACE(SEND_COMMAND, mysql, (command, header_length, arg_length, header, arg));
if (net_write_command(net,(uchar) command, header, header_length,
arg, arg_length))
{
set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
goto end;
}