A tabela 'performance_schema.session_variables' não existe


299

Depois de atualizar o MySQL para 5.7.8-rc e fazer logon no servidor, recebi o erro:

Table 'performance_schema.session_variables' doesn't exist

Não consigo encontrar nenhuma solução para isso. Você pode ajudar ?


2
Outro. Parece que sua atualização não foi bem-sucedida. Você pode considerar fazer o processo de atualização novamente (ou) reinstalar a 5.7.8-rcversão e restaurar o backup completo do banco de dados.
Rahul

2
você executou mysql_upgradepara garantir que alguma alteração nas tabelas principais / dbs foi feita?
Marc B

sim, eu fiz mysql_upgrade, eu dou a última tentativa e reinstalá-lo novamente. Se ele não vai funcionar eu vou fazer o downgrade para 5,6 versão
Taz

28
Tive o mesmo problema: para resolvê-lo, eu corro mysql_upgrade -u root -p --forcee reiniciei o servidor de banco de dados.
robregonm

Se o comando mysql_upgrade não funcionar, a tabela mysql.performance_schema pode ter sido corrompida. Nós tivemos esse problema. Para corrigir o problema, removemos o servidor de banco de dados usando o comando: apt-get purge mariadb-client-10.1 mariadb-common mariadb-server-10.1. Isso removeu todos os arquivos binários, de configuração e de dados do banco de dados. Em seguida, reinstalamos o servidor de banco de dados e importamos de volta os bancos de dados. Depois disso, o servidor de banco de dados foi executado sem problemas #
Nadir Latif

Respostas:


227

O mysql_upgrade também funcionou para mim:

# mysql_upgrade -u root -p --force
# systemctl restart mysqld

Atenciosamente, MSz.


25
Eu precisava reiniciar o mysqld ( mysql.server restartjá que estou usando uma instalação homebrew no os x), então isso foi útil. Caso contrário, recebi um erro sobre as session_variables terem a estrutura errada.
Geoffrey Wiseman

Comportamento idêntico com o Homebrew no OS X 10.10.5 (Yosemite). A atualização também corrige uma falha no Sequel Pro 1.1 (build 4499) ao tentar carregar o banco de dados.
William Turrell

4
Native table 'performance_schema'.'session_variables' has the wrong structure
31516 Stephen

8
Se você estiver usando, brew servicespoderá reiniciar o servidor com brew services restart mysql.
Frederik Kammer 22/02

1
Isso não funciona para mim, a resposta correta é dada pelo viq. somente é necessário para ativar a compatibilidade do programa.
kato2

482

Consegui fazer logon no servidor mysql depois de executar o comando @robregonm sugerido:

mysql_upgrade -u root -p --force

É necessário reiniciar o servidor MySQL.


6
Isso funcionou bem. Obrigado. Quero saber qual é o motivo.
Diguage

2
Estou ficando Access denied for user 'root'@'localhost' (using password: YES) while connecting to the MySQL servermesmo usando a senha de root correta. Qualquer ajuda?? : - /
sixty4bit 23/03

4
@ sixty4bit tente remover o p
Mike Mellor

1
@NevilleNazerane Não estou familiarizado com o php fácil, mas você deve ser capaz de localizar onde o mysql é instalado e, em seguida, basta abrir um prompt do cdm e alterar o diretório para esse local. Agora você deve poder executar o comando.
Mihai Caracostea

4
@diguage O motivo é que a atualização da versão do MySQL introduziu esquemas incompatíveis de versão para metadados internos. Para mim, estou atualizando o MySQL 5.6 para o MySQL 5.7 em um Mac usando o Homebrew e o diretório de dados do MySQL não foi alterado, portanto a nova versão do MySQL estava lendo os metadados internos antigos, mas não sei o que fazer - esse erro que vimos aqui é um manifesto dessa questão. Depois mysql_upgradee um reinício, tudo funcionou. Veja: dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html
Devy

110
mysql -u app -p
mysql> set @@global.show_compatibility_56=ON;

conforme http://bugs.mysql.com/bug.php?id=78159 funcionou para mim.


1
Isso funcionou perfeitamente para mim! E eu não ter de reiniciar o servidor mysql que teria sido tão complicado
anu.agg

3
Sinto muito, esta é uma solução um pouco grande demais: como usar uma bazuca para disparar uma mosca. Essa opção de compatibilidade tem muito mais efeitos, talvez você não queira todos eles.
Tuncay Göncüoğlu

@Tuncay Göncüoğlu quais são alguns desses efeitos colaterais?
katzmopolitan

@katzmopolitan Leia aqui: dev.mysql.com/doc/refman/5.7/en/… . As alterações estão principalmente relacionadas ao manuseio de INFORMAÇÕES_SCHEMA (segurança, etc.), mas há mais.
Tuncay Göncüoğlu 7/11

Isso funcionou para mim também. A mensagem de erro que recebi foi do mysqldump. Uma vez que eu fiz a mudança sugerida, o mysqldump funcionou. Depois de fazer o despejo, mudei o show_compatibility_56 de volta para OFF.
Bryan

23

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_56alterou seu valor padrão de ser ativado ONpor 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_schemavez de ativadas information_schema, essa flag foi introduzida ONnos 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_schemafaltado 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_schemaonde estava lendo por causa da ativação do sinalizador ON). Desde que performance_schemafoi 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 :)


1
Obrigado. Eu queria saber o que causou esse problema antes de saltar e fazer alterações.
Ken Ingram

4

Siga estas etapas sem -p:

  1. mysql_upgrade -u root
  2. systemctl restart mysqld

Eu tive o mesmo problema e funciona!


Isso funciona! Só systemctl restart mysqldnão funcionou.
Ninja

então usesystemctl restart mysql
BitDEVil2K16 02/02/19

1

Como uma pergunta de sessenta e quatro bits, se o usuário root do mysql parecer estar configurado incorretamente, tente instalar a extensão do configurador da fonte oficial do mysql:

https://dev.mysql.com/downloads/repo/apt/

Isso ajudará você a configurar uma nova senha de usuário root.

Certifique-se de atualizar seu repositório (debian / ubuntu):

apt-get update

0

Para o meu sistema, o problema acabou sendo que eu ainda tinha o Mysql 5.6 instalado e, portanto, o mysql_upgrade.exe daquela instalação estava sendo chamado em vez do 5.7. Navegue C:\Program Files\MySQL\MySQL Server 5.7\bine execute.\mysql_upgrade.exe -u root


0

Se, ao usar o mysql_upgrade -u root -p --forcecomando, você receber este erro:

Could not create the upgrade info file '/var/lib/mysql/mysql_upgrade_info' in the MySQL Servers datadir, errno: 13

basta adicionar o sudoantes do comando. Isso funcionou para mim e resolvi meu problema. Então é: sudo mysql_upgrade -u root -p --force:)


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.