Ho provato a importare un file sql di grandi dimensioni tramite phpMyAdmin ... Ma continuava a mostrare errori
'Il server MySql è andato via'
Cosa fare?
max_allowed_packet
. Un po 'rozzo, ma se funziona puoi trovare un valore sano.
Ho provato a importare un file sql di grandi dimensioni tramite phpMyAdmin ... Ma continuava a mostrare errori
'Il server MySql è andato via'
Cosa fare?
max_allowed_packet
. Un po 'rozzo, ma se funziona puoi trovare un valore sano.
Risposte:
Come indicato qui :
Due motivi più comuni (e correzioni) per il server MySQL è andato via (errore 2006) sono:
Il server è scaduto e ha chiuso la connessione. Come risolvere:
controlla che la variabile wait_timeout nel file di configurazione my.cnf di mysqld sia abbastanza grande. Su Debian:,
sudo nano /etc/mysql/my.cnf
imposta iwait_timeout = 600
secondi (puoi modificare / ridurre questo valore quando l'errore 2006 è sparito), quindisudo /etc/init.d/mysql restart
. Non ho verificato, ma il valore predefinito per wait_timeout potrebbe essere di circa 28800 secondi (8 ore).Il server ha eliminato un pacchetto errato o troppo grande. Se mysqld ottiene un pacchetto che è troppo grande o errato, presuppone che qualcosa sia andato storto con il client e chiude la connessione. È possibile aumentare il limite massimo della dimensione del pacchetto aumentando il valore di max_allowed_packet nel file my.cnf. Su Debian:,
sudo nano /etc/mysql/my.cnf
impostaremax_allowed_packet = 64M
(è possibile modificare / ridurre questo valore quando l'errore 2006 è scomparso), quindisudo /etc/init.d/mysql restart
.
Modificare:
Nota che i file delle opzioni di MySQL non hanno i loro comandi già disponibili come commenti (come ad esempio in php.ini). Quindi, è necessario digitare alcun cambiamento / Tweak in my.cnf
o my.ini
e metterli in mysql/data
directory o in uno qualsiasi degli altri percorsi, sotto il corretto gruppo di opzioni come [client]
, [myslqd]
, ecc, ad esempio:
[mysqld]
wait_timeout = 600
max_allowed_packet = 64M
Quindi riavviare il server. Per ottenere i loro valori, digita il client mysql:
> select @@wait_timeout;
> select @@max_allowed_packet;
SHOW VARIABLES
query MySQL) e il file che stavo importando aveva alcuni record molto grandi. Ho aperto il file my.ini (stavo eseguendo Windows) e ho impostato il valore su questo: ho max_allowed_packet = 64M
riavviato MySQL ed eseguito nuovamente l'importazione.
wait_timeout
linea
Per me questa soluzione non ha funzionato, quindi l'ho eseguita
SET GLOBAL max_allowed_packet=1073741824;
nel mio client SQL.
Se non è possibile modificarlo con il servizio MYSql in esecuzione, è necessario arrestare il servizio e modificare la variabile nel file "my.ini".
Per esempio:
max_allowed_packet=20M
php.ini
file (come suggerito da @GBD nella risposta) sia il file di configurazione di MySQL my.ini
per farlo funzionare.
SHOW variables LIKE 'max_allowed_packet'
max_allowed_packet
in un client e l'importazione del .sql
file di grandi dimensioni in un'altra sessione funzionerà correttamente.
Se stai lavorando su XAMPP, puoi risolvere il problema relativo al problema del server MySQL con le seguenti modifiche:
apri il tuo file my.ini posizione my.ini è (D: \ xampp \ mysql \ bin \ my.ini)
cambia i seguenti valori variabili
max_allowed_packet = 64M
innodb_lock_wait_timeout = 500
Se si esegue con valori predefiniti, si ha molto spazio per ottimizzare la configurazione di mysql.
Il primo passo che raccomando è di aumentare il max_allowed_packet a 128M.
Quindi scaricare lo script MySQL Tuning Primer ed eseguirlo. Fornirà consigli su diversi aspetti della configurazione per prestazioni migliori.
Cerca anche di regolare i valori di timeout sia in MySQL che in PHP.
Quanto è grande (dimensione del file) il file che stai importando e sei in grado di importare il file usando il client della riga di comando mysql invece di PHPMyAdmin?
Se si utilizza MAMP su OS X, è necessario modificare il max_allowed_packet
valore nel modello per MySQL.
Puoi trovarlo su: File> Modifica modello> MySQL my.cnf
Quindi cerca max_allowed_packet
, modifica il valore e salva.
Ho risolto il mio problema con questo breve file /etc/mysql/my.cnf:
[mysqld]
wait_timeout = 600
max_allowed_packet = 100M
[mysqld]
L'altro motivo per cui ciò può accadere sta esaurendo la memoria. Controlla / var / log / messages e assicurati che my.cnf non sia impostato per causare a mysqld di allocare più memoria di quella della tua macchina.
Il tuo processo mysqld può essere effettivamente ucciso dal kernel e quindi riavviato dal processo "safe_mysqld" senza che te ne accorga.
Usa top e osserva l'allocazione di memoria mentre è in esecuzione per vedere qual è il tuo margine.
fare un backup di my.cnf prima di cambiarlo.
Ho avuto questo errore e altri relativi, quando ho importato un file SQL da 16 GB. Per me, modificare my.ini e impostare quanto segue (in base a diversi post) nella sezione [mysqld]:
max_allowed_packet = 110M
innodb_buffer_pool_size=511M
innodb_log_file_size=500M
innodb_log_buffer_size = 800M
net_read_timeout = 600
net_write_timeout = 600
Se stai utilizzando Windows, vai al pannello di controllo, ai servizi e guarda i dettagli di MySQL e vedrai dove si trova my.ini. Quindi, dopo aver modificato e salvato my.ini, riavvia il servizio mysql (o riavvia il computer).
Se stai usando HeidiSQL, puoi anche impostare alcuni o tutti questi usando quello.
Ho aggiornato "max_allowed_packet" a 1024M, ma non funzionava ancora. Si scopre che il mio script di distribuzione era in esecuzione:
mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql
Assicurati di specificare esplicitamente un numero maggiore dalla riga di comando se lo stai donando in questo modo.
Se i tuoi dati includono BLOB
dati:
Si noti che un'importazione di dati dalla riga di comando sembra soffocare sui dati BLOB, causando l'errore "Il server MySQL è andato via".
Per evitarlo, ricrea il mysqldump ma con il --hex-blob
flag:
http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_hex-blob
che scriverà il file di dati con valori esadecimali anziché binari tra l'altro testo.
PhpMyAdmin ha anche l'opzione "Scarica colonne binarie in notazione esadecimale (ad esempio" abc "diventa 0x616263)" che funziona bene.
Si noti che esiste un bug di vecchia data (a dicembre 2015) che significa che le GEOM
colonne non vengono convertite:
eseguire il backup di una tabella con una colonna GEOMETRY utilizzando mysqldump?
pertanto l'utilizzo di un programma come PhpMyAdmin sembra essere l'unica soluzione (l'opzione indicata sopra converte correttamente le colonne GEOM).
Se l'operazione impiega molto tempo a fallire, ingrandire la wait_timeout
variabile.
Se fallisce subito, ingrandire la max_allowed_packet
variabile; se continua a non funzionare, assicurati che il comando sia SQL valido. Il mio aveva citazioni senza caratteri di escape che hanno rovinato tutto.
Inoltre, se possibile, considera di limitare il numero di inserimenti di un singolo comando SQL a, diciamo, 1000. Puoi creare uno script che crea più istruzioni da uno solo reintroducendo la parte INSERT ... ogni n inserti.
ho riscontrato un errore simile .. per risolvere questo problema basta aprire il file my.ini..qui alla riga n. 36 modificare il valore della dimensione massima consentita del pacchetto, ad es. max_allowed_packet = 20M
Assicurarsi che il processo mysqld non si riavvii a causa di gestori di servizi come systemd.
Ho avuto questo problema in vagabondo con centos 7. Le modifiche alla configurazione non mi hanno aiutato. Si è scoperto che è stato systemd che ha ucciso il servizio mysqld ogni volta che ha richiesto troppa memoria.
Ho avuto un errore simile oggi durante la duplicazione del database (il server MySQL è andato via ...), ma quando ho provato a riavviare mysql.server riavvio ho ricevuto un errore
ERROR! The server quit without updating PID ...
Ecco come l'ho risolto: ho aperto Applicazioni / Utilità / ed eseguito Activity Monitor
quit mysqld
quindi è stato in grado di risolvere il problema con l'errore
mysql.server restart
Sto facendo alcuni grandi calcoli che coinvolgono la connessione mysql per rimanere a lungo e con dati pesanti. stavo affrontando questo "problema di Mysql go away". Quindi ho provato a ottimizzare le query, ma ciò non mi ha aiutato, quindi ho aumentato il limite delle variabili mysql che è impostato su un valore inferiore per impostazione predefinita.
wait_timeout max_allowed_packet
Al limite, qualunque cosa ti si adatti, dovrebbe essere qualsiasi numero * 1024 (byte). puoi accedere al terminale usando il comando ' mysql -u username - p ' e puoi controllare e modificare questi limiti variabili.
Sugli account di hosting condiviso di GoDaddy, è difficile modificare i file PHP.ini ecc. Tuttavia, c'è un altro modo e ha funzionato perfettamente per me. (Ho appena caricato con successo un file di testo .sql da 3,8 Mb, contenente 3100 righe e 145 cols. Usando il comando IMPORT in phpMyAdmin, stavo ottenendo il temuto server MySQL è andato via errore e nessuna ulteriore informazione.)
Ho scoperto che Matt Butcher aveva la risposta giusta. Come Matt, avevo provato tutti i tipi di trucchi, dall'esportazione di database MySQL in blocchi di dimensioni ridotte, alla scrittura di script che dividevano le grandi importazioni in quelli più piccoli. Ma ecco cosa ha funzionato:
(1) CPANEL ---> FILES (gruppo) ---> BACKUP
(2a) Sotto l'intestazione "Backup parziali" ...
(2b) In "Scarica un backup del database MySQL"
(2c) Scegli il tuo database e scarica un backup (questo passaggio è facoltativo, ma saggio)
(3a) Direttamente a destra di 2b, sotto la voce "Ripristina un backup del database MySQL"
(3b) Scegli il file di importazione .SQL dall'unità locale
(3c) La vera felicità sarà tua (a breve ....) 5 secondi
Sono stato in grado di utilizzare questo metodo per importare una singola tabella. Nient'altro nel mio database è stato interessato, ma questo è il punto (2) di cui sopra per proteggere.
Note:
a. Se non si è sicuri su come creare un file di importazione .SQL, utilizzare phpMyAdmin per esportare una tabella e modificare quella struttura di file.
max_allowed_packet
non aiuta.Stavo riscontrando lo stesso errore durante l'importazione di un .sql
file nel mio database tramite Sequel Pro.
L'errore persisteva anche dopo aver aumentato il max_allowed_packet
to, 512M
quindi ho eseguito l'importazione nella riga di comando invece con:
mysql --verbose -u root -p DatabaseName < MySQL.sql
Ha dato il seguente errore:
ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled
Ho trovato un paio di utili domande su StackOverflow:
Nel mio caso, il mio .sql
file era un po 'corrotto o qualcosa del genere. Il dump di MySQL che otteniamo viene fornito in due file zip che devono essere concatenati insieme e quindi decompressi. Penso che la decompressione sia stata inizialmente interrotta, lasciando il file con alcuni caratteri e codifiche dispari. Ottenere un nuovo dump MySQL e decomprimerlo ha funzionato correttamente per me.
Volevo solo aggiungere questo nel caso in cui altri scoprissero che aumentare la max_allowed_packet
variabile non era d'aiuto.
Nessuna delle soluzioni relative alle dimensioni dei pacchetti o ai timeout ha fatto alcuna differenza per me. Ho dovuto disabilitare ssl
mysql -u -p -hmyhost.com --disable-ssl db < file.sql
https://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html
Ho avuto lo stesso problema con
$image_base64 = base64_encode(file_get_contents($_FILES['file']['tmp_name']) );
$image = 'data:image/jpeg;base64,'.$image_base64;
$query = "insert into images(image) values('".$image."')";
mysqli_query($con,$query);
Nel file \ xampp \ mysql \ bin \ my.ini di phpmyadmin otteniamo solo
[mysqldump]
max_allowed_packet=110M
che è solo per mysqldump -u root -p dbname. Ho risolto il mio problema sostituendo il codice sopra con
max_allowed_packet=110M
[mysqldump]
max_allowed_packet=110M