I problemi di comunicazione con il database si verificano in qualsiasi sistema, indipendentemente dal fatto che Magento o meno.
Quindi, infatti, questo post aiuta tutti gli sviluppatori a lavorare con database, in particolare con MySQL.
Il SQLSTATE segnala un problema che ha causato il problema della comunicazione. Ma non indica la sua origine. Vediamo di seguito.
Interpretazione dei messaggi
Di solito sono brevi messaggi, di tipo:
SQLSTATE[HY000]: General error: 2013 Lost connection to MySQL server during query
SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
Questo non ci dice veramente niente, proprio quello che sappiamo (ha dato un errore). Una traduzione gratuita per questi messaggi sarebbe rispettivamente:
Errore generico: 2013 Sono andato a consultare il database e sono andato perduto sul retro
Errore generico: 2006 Il server di database ti ha abbandonato
E così è così difficile trovare una soluzione pronta perché non conosciamo le cause del problema.
Possibili cause
Server fuori servizio. E questo può accadere per alcuni secondi o poche ore. Il server di database potrebbe essere riavviato o arrestato.
E questo può verificarsi per diversi motivi, come ad esempio un’aggiornamento di versione o una protezione, interruzione di corrente, arresto accidentale, sovraccarico, arresti anomali ecc.
Tempo di risposta. Ogni sistema ha un limite di attesa e quando il sistema “parla” al database, viene richiesta una richiesta… MySQL accetta la tua richiesta e procederà… e questo potrebbe richiedere un po ‘di tempo… se non aspetti di molto abbastanza, andate via senza la risposta.
Cioè, c’è un’impostazione che indica al server quale sia il tempo di esecuzione per una richiesta. Se il tempo esplode, il processo viene interrotto e un messaggio di errore viene inviato al sistema.
Non ho intenzione di approfondire il soggetto, ma c’è anche la coda. Volete fare una richiesta al database, ma prima che ci siano altre 300 persone in attesa di effettuare la query. E il volume delle transazioni influenza il suo tempo di risposta, così come l’overhead menzionato in precedenza.
Infrastrutture
Come ho detto all’inizio del posto, è difficile dare una soluzione definitiva, perché la causa del problema è sconosciuta e/o incerta. Tuttavia, spesso la carenza è nell’infrastruttura utilizzata.
Server e Hosting. Molte persone confondono server e hosting e non è possibile fornire una spiegazione approfondita al momento. Ma in sintesi:
Server, è la macchina, il computer che rimarrà connesso e connesso a Internet per consentire alle persone di accedere al tuo sito.
Hosting, è la tua configurazione all’interno di questo server, le funzionalità che saranno disponibili al tuo sistema.
Entrambi sono importanti, quindi è indispensabile assumere un server di qualità con un buon piano di hosting (VPS, Dedicato o Cloud).
Aziende raccomandate: Rackspace, Nexcess, UolHost, Hostgator, Digital Ocean
Configurazione
A volte puoi risolvere il problema configurando almeno temporaneamente (finché non esegui risorse). Accedi al tuo MySQL tramite PhpMyAdmin e fai clic su Variabili.
Tutte le variabili possono (e devono) essere configurate in base alle esigenze del tuo sistema e/o del volume di accesso. Nel caso di Magento è possibile modificare i valori di:
#il valore predefinito è 10 (secondi), aumenta se il problema è l'errore 2013. connect_timeout=30 #il tempo massimo (secondi) che il server attende prima di chiudere una connessione senza attività. wait_timeout=300 #È consigliato il 25% della memoria disponibile per il database. se è superiore al 50% la macchina è lenta key_buffer_size=64M #dovrebbe essere doppio max_connections table_open_cache=2000 #numero massimo di connessioni simultanee max_connections=1000
Riferimento ufficiale: connect_timeout, wait_timeout, key_buffer_size, table_open_cache, max_connections.
Riavvia mysql dopo aver apportato le modifiche.
Non sarà sempre possibile accedere a queste impostazioni, soprattutto se si utilizza un piano di hosting condiviso.
Attenzione! Se stai usando un piano condiviso, i problemi riprenderanno.
Almeno ora hai un’idea di cosa si può fare per risolvere il problema.
Successo!