Errore generale: il server MySQL 2006 è andato via [chiuso]


8

Questo è l'errore che ricevo improvvisamente.

Additional uncaught exception thrown while handling exception.

Original
PDOException: SQLSTATE[70100]: Unknown error: 1317 Query execution was interrupted...my query

Additional
PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away...my query

Dopo aver fatto qualche ricerca, sembra che un modulo personalizzato, che ho realizzato, stia tentando una query troppo grande. Una soluzione che sembra funzionare per molte persone è questa:

  1. Apri my.ini
  2. Cambia "max_allowed_packet" da "1m" a "16m" (o più grande)
  3. Salva my.ini e riavvia MySQL

Tuttavia, mi trovo su un server condiviso, quindi non posso modificare my.ini e sebbene il mio provider mi abbia confermato che il valore è impostato su 1M, non lo aumenteranno.

Ho anche provato ad aggiungere questo: ini_set('mysqli.reconnect', 'on');a settings.php. Non ha risolto il problema.

Qualcuno sa di un'altra soluzione o aggira?

Grazie.


Risposte:


8

Le società di hosting condiviso non danno via il privilegio SUPER . Se ce l'hai, puoi facilmente impostare max_allowed_packet su 512M semplicemente eseguendo questo:

mysql> SET GLOBAL max_allowed_packet = 1024 * 1024 * 512;

Non è richiesto il riavvio. Quindi, tutte le connessioni in entrata da allora in poi possono avere un pacchetto da 512M .

Non puoi farlo:

mysql> SET max_allowed_packet = 1024 * 1024 * 512;

perché ottieni

ERROR 1621 (HY000): SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value

L'unica alternativa che mi viene in mente è quella di passare ad Amazon EC2 e installare MySQL lì. In questo modo, puoi avere libero sfogo per modificare my.cnf / my.ini e avere il privilegio SUPER .


0

Ho chiesto al mio fornitore di aumentare il valore, ma non lo hanno fatto. Posso capire perché, sono un'azienda e vogliono che paghi 29,99 al mese per un server dedicato, anziché 4,99 per un server condiviso.

Tuttavia, esiste una soluzione: identificare la query che è troppo grande e suddividerla in due o più parti. Ho diviso la mia domanda del problema a metà: problema risolto. Inefficiente - sì - ma è meglio che il mio sito non funzioni affatto o debba pagare un extra.


Tieni presente ciò che ho detto sui pacchetti MySQL ( superuser.com/a/273833/76764 ) I soliti sospetti che possono ostruire un pacchetto MySQL sono grandi campi TEXT / BLOB. Quindi potresti voler pensare a comprimere il tuo TEXT/BLOB fieldscodice di rigging invece jerry.
RolandoMySQLDBA

Sì, forse questo può essere il problema, ma sebbene la mia query SELECT fosse relativamente complessa, il set di risultati restituito era di poche centinaia di caratteri di testo.
dbj44

2
È possibile che si verifichino problemi con le tabelle della cache che eseguono INSERT piuttosto grandi. La tua soluzione non funzionerà qui o in qualsiasi altro luogo in cui Drupal sta eseguendo la query.
mpdonadio

Non è un INSERT, ma solo una query SELECT con circa 25 join. Tutto fatto con il generatore di query. Sai perché questo causerebbe un simile errore? Fare INSERT tramite un gestore di invio modulo non è un problema.
dbj44,

0

Il problema è perché max_allowed_packet, lo si imposta con un valore maggiore.

Come risolvere questo problema (se sei in Windows e stai usando xamp altrimenti trova il file my.ini)
Vai a xampp \ mysql \ bin
Apri my.ini
Cambia "max_allowed_packet" da "1m" a "16m"
Salva my.ini
Ora riavvia MySql tramite il pannello di controllo di XAMPP.

Ho trovato questa soluzione qui. http://minorpoint.blogspot.com/2007/09/mysql-server-has-gone-away.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.