Como nenhuma das respostas acima realmente explica o que aconteceu, decidi entrar em cena e trazer mais alguns detalhes para esse problema.
Sim, a solução é executar o comando Upgrade do MySQL, da seguinte maneira: mysql_upgrade -u root -p --force
mas o que aconteceu?
A causa raiz desse problema é a corrupção de performance_schema
, que pode ser causada por:
- Corrupção orgânica (volumes que vão do kaboom, bug do mecanismo, problema do driver do kernel etc.)
- Corrupção durante o patch do mysql (não é inédito que isso ocorra durante um patch do mysql, especialmente para atualizações de versão principais)
- Um simples "drop data performance_schema" obviamente causará esse problema e apresentará os mesmos sintomas como se estivesse corrompido
Esse problema pode estar presente no seu banco de dados mesmo antes do patch, mas o que aconteceu no MySQL 5.7.8 especificamente é que o sinalizador show_compatibility_56
alterou seu valor padrão de ser ativado ON
por padrão paraOFF
. Este sinalizador controla como o mecanismo se comporta nas consultas para definir e ler variáveis (sessão e global) em várias versões do MySQL.
Como o MySQL 5.7+ começou a ler e armazenar essas variáveis ativadas em performance_schema
vez de ativadas information_schema
, essa flag foi introduzida ON
nos primeiros lançamentos para reduzir o raio de explosão dessa alteração e permitir que os usuários soubessem da mudança e se acostumassem.
OK, mas por que a conexão falha? Como, dependendo do driver que você está usando (e de sua configuração), ele pode acabar executando comandos para cada nova conexão iniciada no banco de dados (como show variables
, por exemplo). Como um desses comandos pode tentar acessar um arquivo corrompidoperformance_schema
, toda a conexão é interrompida antes de ser totalmente iniciada.
Portanto, em resumo, você pode (é impossível dizer agora) ter performance_schema
faltado ou corrompido antes de aplicar o patch. O patch para 5.7.8 forçou o mecanismo a ler suas variáveis performance_schema
(em vez de de information_schema
onde estava lendo por causa da ativação do sinalizador ON
). Desde que performance_schema
foi corrompido, as conexões estão falhando.
Executar a atualização do MySQL é a melhor abordagem, apesar do tempo de inatividade. Ativar a bandeira é uma opção, mas ela vem com seu próprio conjunto de implicações, como já foi apontado neste tópico.
Ambos devem funcionar, mas ponderem as consequências e conheçam suas escolhas :)
5.7.8-rc
versão e restaurar o backup completo do banco de dados.