La tabla 'performance_schema.session_variables' no existe


299

Después de actualizar MySQL a 5.7.8-rc y registrarlo en el servidor, recibí un error:

Table 'performance_schema.session_variables' doesn't exist

No puedo encontrar ninguna solución para esto. Puede usted ayudar ?


2
Otro. Parece que su actualización no tuvo éxito. Es posible que desee considerar volver a realizar el proceso de actualización (o) reinstalar la 5.7.8-rcversión y restaurar desde la copia de seguridad completa de la base de datos.
Rahul

2
¿Ejecutó mysql_upgradepara asegurarse de que se realizaron cambios en las tablas principales / dbs?
Marc B

Sí, lo hice mysql_upgrade, lo intento por última vez y lo reinstalo nuevamente. Si no funciona, bajaré a la versión 5.6
Taz

28
Experimenté el mismo problema, para resolverlo, ejecuté mysql_upgrade -u root -p --force, luego reinicié el servidor DB.
robregonm

Si el comando mysql_upgrade no funciona, la tabla mysql.performance_schema puede haberse dañado. Tuvimos este problema Para solucionar el problema, eliminamos el servidor de la base de datos con el comando: apt-get purge mariadb-client-10.1 mariadb-common mariadb-server-10.1. Esto eliminó toda la base de datos binaria, configuración y archivo de datos. Luego reinstalamos el servidor de la base de datos e importamos las bases de datos. Después de eso, el servidor de la base de datos funcionó sin problemas
Nadir Latif

Respuestas:


227

Mysql_upgrade también funcionó para mí:

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

Saludos, MSz.


25
Necesitaba reiniciar mysqld ( mysql.server restartya que estoy usando una instalación homebrew en os x), así que esto fue útil. De lo contrario, recibí un error sobre session_variables que tiene la estructura incorrecta.
Geoffrey Wiseman

Comportamiento idéntico con Homebrew en OS X 10.10.5 (Yosemite). Hacer la actualización también corrige un bloqueo en Sequel Pro 1.1 (compilación 4499) al intentar cargar la base de datos.
William Turrell

44
Native table 'performance_schema'.'session_variables' has the wrong structure
Stephen

8
Si está utilizando brew services, puede reiniciar su servidor con brew services restart mysql.
Frederik Kammer

1
Esto no funciona para mí, viq da la respuesta correcta. solo es necesario para habilitar la compatibilidad del programa.
kato2

482

Pude iniciar sesión en el servidor mysql después de ejecutar el comando @robregonm sugerido:

mysql_upgrade -u root -p --force

Se requiere reiniciar el servidor MySQL.


66
Eso funcionó bien. Gracias. Quiero saber cuál es la razón.
diguage

2
Recibo Access denied for user 'root'@'localhost' (using password: YES) while connecting to the MySQL serveraunque estoy usando la contraseña de root correcta. ¿¿Alguna ayuda?? : - /
sixty4bit

44
@ sixty4bit intenta eliminar el -p
Mike Mellor

1
@NevilleNazerane No estoy familiarizado con php fácil, pero debería poder localizar dónde se instala mysql y luego simplemente abrir un indicador de cdm y cambiar el directorio a esa ubicación. Ahora debería poder ejecutar el comando.
Mihai Caracostea

44
@diguage La razón es que la actualización de la versión de MySQL ha introducido esquemas de versiones incompatibles para metadatos internos. Para mí, estoy actualizando MySQL 5.6 a MySQL 5.7 en una Mac usando Homebrew y el directorio de datos de MySQL no cambió, por lo que la nueva versión MySQL estaba leyendo los antiguos metadatos internos pero no sé qué hacer, ese error que hemos visto aquí es un manifiesto de ese problema. Después mysql_upgradey un reinicio, todo funcionó. Ver: dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html
Devy

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

según http://bugs.mysql.com/bug.php?id=78159 funcionó para mí.


1
¡Esto funcionó perfectamente para mí! Y yo no tenía que reiniciar el servidor MySQL, que habría sido tan engorroso
anu.agg

3
Lo siento, esta es una solución algo grande: como usar una bazuca para disparar una mosca. Este interruptor de compatibilidad tiene muchos más efectos, es posible que no los desee a todos.
Tuncay Göncüoğlu

@Tuncay Göncüoğlu ¿Cuáles son algunos de estos efectos secundarios?
katzmopolitan

@katzmopolitan Lea aquí: dev.mysql.com/doc/refman/5.7/en/… . Los cambios están relacionados principalmente con el manejo de INFORMATION_SCHEMA (seguridad, etc.), pero hay más.
Tuncay Göncüoğlu

Esto funcionó para mí también. El mensaje de error que recibí fue de mysqldump. Una vez que hice el cambio sugerido, mysqldump funcionó. Una vez que tuve el volcado, simplemente cambié show_compatibility_56 a OFF.
Bryan

23

Como ninguna de las respuestas anteriores explica realmente lo que sucedió, decidí intervenir y aportar más detalles sobre este problema.

Sí, la solución es ejecutar el comando de actualización de MySQL de la siguiente manera mysql_upgrade -u root -p --force, pero ¿qué pasó?

La causa raíz de este problema es la corrupción de performance_schema, que puede ser causada por:

  • Corrupción orgánica (volúmenes volviendo kaboom, error del motor, problema del controlador del kernel, etc.)
  • Corrupción durante el parche mysql (no es extraño que esto suceda durante un parche mysql, especialmente para actualizaciones de versiones principales)
  • Obviamente, una simple "caída de la base de datos performance_schema" causará este problema y presentará los mismos síntomas que si estuviera dañado

Este problema podría haber estado presente en su base de datos incluso antes del parche, pero lo que sucedió en MySQL 5.7.8 específicamente es que el indicador show_compatibility_56cambió su valor predeterminado de ser activado ONpor defecto a OFF. Este indicador controla cómo se comporta el motor en las consultas para configurar y leer variables (sesión y global) en varias versiones de MySQL.

Debido a que MySQL 5.7+ comenzó a leer y almacenar estas variables en performance_schemalugar de hacerlo information_schema, este indicador se introdujo ONen las primeras versiones para reducir el radio de explosión de este cambio y para que los usuarios conozcan el cambio y se acostumbren.

OK, pero ¿por qué falla la conexión? Porque dependiendo del controlador que esté utilizando (y su configuración), puede terminar ejecutando comandos para cada nueva conexión iniciada en la base de datos (como show variables, por ejemplo). Debido a que uno de estos comandos puede intentar acceder a un corrupto performance_schema, la conexión completa se cancela antes de iniciarse por completo.

Entonces, en resumen, es posible (es imposible saberlo ahora) haber performance_schemafaltado o dañado antes de parchear. El parche a 5.7.8 luego forzó al motor a leer sus variables performance_schema(en lugar de information_schema, desde dónde lo estaba leyendo debido a que se activó la bandera ON). Como performance_schemase corrompió, las conexiones están fallando.

Ejecutar la actualización de MySQL es el mejor enfoque, a pesar del tiempo de inactividad. Activar el indicador es una opción, pero tiene sus propias implicaciones, como ya se señaló en este hilo.

Ambos deberían funcionar, pero sopesa las consecuencias y conoce tus opciones :)


1
Gracias. Me preguntaba qué causó este problema antes de saltar y hacer cambios.
Ken Ingram

4

Siga estos pasos sin -p:

  1. mysql_upgrade -u root
  2. systemctl restart mysqld

Tuve el mismo problema y funciona!


¡Esto funciona! Solo systemctl restart mysqldque no funcionó.
Ninja

luego usesystemctl restart mysql
BitDEVil2K16

1

Como pregunta de sesenta y cuatro bits, si su usuario root de mysql parece estar mal configurado, intente instalar la extensión del configurador desde la fuente oficial de mysql:

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

Le ayudará a configurar una nueva contraseña de usuario root.

Asegúrese de actualizar su repositorio (debian / ubuntu):

apt-get update

0

Para mi sistema, el problema terminó siendo que todavía tenía Mysql 5.6 instalado y, por lo tanto, se llamaba mysql_upgrade.exe de esa instalación en lugar del 5.7. Navega C:\Program Files\MySQL\MySQL Server 5.7\biny corre.\mysql_upgrade.exe -u root


0

Si, mientras usa el mysql_upgrade -u root -p --forcecomando, obtiene este error:

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

simplemente agregue el sudoantes del comando. Eso funcionó para mí y resolví mi problema. Entonces, es: sudo mysql_upgrade -u root -p --force:)


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.