Dal momento che nessuna delle risposte sopra spiegano effettivamente cosa è successo, ho deciso di intervenire e portare alcuni dettagli in più su questo problema.
Sì, la soluzione è eseguire il comando di aggiornamento di MySQL, come segue:, mysql_upgrade -u root -p --force
ma cosa è successo?
La causa principale di questo problema è la corruzione di performance_schema
, che può essere causata da:
- Corruzione organica (volumi che vanno su kaboom, bug del motore, problema del driver del kernel ecc.)
- Corruzione durante la patch mysql (non è inaudito che ciò accada durante una patch mysql, specialmente per gli aggiornamenti della versione principale)
- Un semplice "drop database performance_schema" causerà ovviamente questo problema e presenterà gli stessi sintomi come se fosse danneggiato
Questo problema potrebbe essere stato presente nel tuo database anche prima della patch, ma ciò che è accaduto in particolare su MySQL 5.7.8 è che il flag ha show_compatibility_56
cambiato il suo valore predefinito passando ON
da default a OFF
. Questo flag controlla il comportamento del motore nelle query per l'impostazione e la lettura delle variabili (sessione e globale) su varie versioni di MySQL.
Poiché MySQL 5.7+ ha iniziato a leggere e archiviare queste variabili su performance_schema
anziché su information_schema
, questo flag è stato introdotto come ON
per le prime versioni per ridurre il raggio di esplosione di questa modifica e per far conoscere agli utenti la modifica e abituarsi.
OK, ma perché la connessione fallisce? Perché a seconda del driver che si sta utilizzando (e della sua configurazione), potrebbe finire con l'esecuzione di comandi per ogni nuova connessione avviata al database (come show variables
, ad esempio). Poiché uno di questi comandi può tentare di accedere a un file danneggiato performance_schema
, l'intera connessione si interrompe prima di essere avviata completamente.
Così, in sintesi, si può (è impossibile dire oggi) hanno avuto performance_schema
sia mancante o danneggiato prima di patching. La patch a 5.7.8 ha quindi costretto il motore a leggere le variabili da performance_schema
(anziché da information_schema
dove lo stava leggendo a causa della rotazione della bandiera ON
). Poiché è performance_schema
stato danneggiato, le connessioni non riescono.
L'esecuzione dell'aggiornamento MySQL è l'approccio migliore, nonostante i tempi di inattività. L'attivazione del flag è un'opzione, ma viene fornita con una serie di implicazioni come già indicato su questo thread.
Entrambi dovrebbero funzionare, ma soppesare le conseguenze e conoscere le tue scelte :)
5.7.8-rc
versione e un ripristino dal backup completo del DB.