Таблица «performance_schema.session_variables» не существует


299

После обновления MySQL до 5.7.8-rc и входа на сервер я получил ошибку:

Table 'performance_schema.session_variables' doesn't exist

Я не могу найти никакого решения для этого. Вы можете помочь ?


2
Другой. Похоже, ваше обновление не удалось. Возможно, вы захотите повторить процесс обновления (или) переустановить 5.7.8-rcверсию и восстановить из БД полную резервную копию.
Рахул

2
Вы бежали, mysql_upgradeчтобы убедиться, что были внесены какие-либо изменения в основные таблицы / базы данных?
Марк Б,

да, я сделал mysql_upgrade, я даю ему последнюю попытку и переустановить его снова. Если это не сработает, я вернусь к версии 5.6
Taz

28
У меня возникла та же проблема, для ее решения я запускаю mysql_upgrade -u root -p --force, а затем перезагружаю сервер БД.
robregonm

Если команда mysql_upgrade не работает, то таблица mysql.performance_schema могла быть повреждена. У нас была эта проблема. Чтобы устранить проблему, мы удалили сервер базы данных с помощью команды: apt-get purge mariadb-client-10.1 mariadb-common mariadb-server-10.1. Это удалило все двоичные файлы базы данных, конфигурацию и файл данных. Затем мы переустановили сервер базы данных и импортировали обратно базы данных. После этого сервер базы данных запустился без проблем
Надир Латиф

Ответы:


227

Mysql_upgrade работал для меня также:

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

С уважением, MSz.


25
Мне нужно было перезапустить mysqld ( mysql.server restartтак как я использую установку homebrew на os x), так что это было полезно. В противном случае я получил ошибку о неправильной структуре session_variables.
Джеффри Уайзман

Идентичное поведение с Homebrew на OS X 10.10.5 (Yosemite). Обновление также устраняет сбой в Sequel Pro 1.1 (сборка 4499) при попытке загрузить базу данных.
Уильям Туррелл

4
Native table 'performance_schema'.'session_variables' has the wrong structure
Стивен

8
Если вы используете, brew servicesвы можете перезагрузить сервер с помощью brew services restart mysql.
Фредерик Каммер

1
Это не работает для меня, правильный ответ дает viq. необходимо только включить шоу совместимость.
kato2

482

Я смог войти на сервер mysql после запуска команды @robregonm:

mysql_upgrade -u root -p --force

Требуется перезагрузка сервера MySQL.


6
Это сработало хорошо. Спасибо. Я хочу знать, в чем причина.
Diguage

2
Я получаю, Access denied for user 'root'@'localhost' (using password: YES) while connecting to the MySQL serverхотя я использую правильный пароль root. Любая помощь?? : - /
sixty4bit

4
@ sixty4bit попробуйте удалить -p
Майк Меллор

1
@NevilleNazerane Я не знаком с простым PHP, но вы должны быть в состоянии найти, где MySQL устанавливается, а затем просто откройте приглашение CDM и измените каталог в этом месте. Теперь вы должны быть в состоянии выполнить команду.
Михай Каракостей

4
@diguage Причина в том, что в обновлении версии MySQL появились несовместимые с версией схемы для внутренних метаданных. Для меня я обновляю MySQL 5.6 до MySQL 5.7 на Mac, используя Homebrew, и каталог данных MySQL не изменился, поэтому новая версия MySQL считывала старые внутренние метаданные, но не знаю, что делать - эта ошибка, которую мы видели здесь, манифест этой проблемы. После mysql_upgradeи перезагрузки все заработало. См. Dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html
Деви

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

согласно http://bugs.mysql.com/bug.php?id=78159 работал для меня.


1
Это отлично сработало для меня! И мне не нужно было перезапускать сервер mysql, который был бы таким громоздким
anu.agg

3
Я извиняюсь, это несколько чрезмерное решение: например, использование базуки для отстрела мухи. Этот переключатель совместимости имеет гораздо больше эффектов, возможно, вам не все из них нужны.
Tuncay Göncüoğlu

@Tuncay Göncüoğlu, каковы некоторые из этих побочных эффектов?
Кацмополит

@katzmopolitan Читайте здесь: dev.mysql.com/doc/refman/5.7/en/… . Изменения в основном связаны с обработкой INFORMATION_SCHEMA (безопасность и т. Д.), Но есть и другие.
Tuncay Göncüoğlu

Это сработало и для меня. Сообщение об ошибке, которое я получил, было от mysqldump. Как только я внес предложенное изменение, mysqldump сработал. Получив дамп, я просто изменил show_compatibility_56 на OFF.
Брайан

23

Поскольку ни один из ответов, приведенных выше, на самом деле не объясняет, что произошло, я решил присоединиться к этой проблеме и рассказать о ней подробнее.

Да, решение состоит в том, чтобы выполнить команду обновления MySQL следующим образом:, mysql_upgrade -u root -p --forceно что случилось?

Основной причиной этой проблемы является повреждение performance_schema, которое может быть вызвано:

  • Органическая коррупция (объемы идут kaboom, ошибка движка, проблема с драйвером ядра и т. Д.)
  • Повреждение во время исправления mysql (не случайно, что это произошло во время исправления mysql, особенно для основных обновлений версий)
  • Простая "drop database performance_schema", очевидно, вызовет эту проблему, и она будет представлять те же симптомы, как если бы она была повреждена

Эта проблема могла присутствовать в вашей базе данных еще до исправления, но то, что произошло на MySQL 5.7.8, в частности, это то, что флаг show_compatibility_56изменил свое значение ONпо умолчанию со значения по умолчанию на OFF. Этот флаг управляет тем, как движок ведет себя в запросах для установки и чтения переменных (сеансовых и глобальных) в различных версиях MySQL.

Поскольку MySQL 5.7+ начал считывать и хранить эти переменные performance_schemaвместо включения information_schema, этот флаг был введен, как и ONв первых выпусках, чтобы уменьшить радиус взрыва этого изменения и дать пользователям знать об этом изменении и привыкнуть к нему.

ОК, но почему не удается установить соединение? Поскольку в зависимости от используемого вами драйвера (и его конфигурации), он может в конечном итоге запускать команды для каждого нового соединения, инициированного с базой данных (например show variables, например). Поскольку одна из этих команд может попытаться получить доступ к поврежденному performance_schema, все соединение прерывается до того, как будет полностью инициировано.

Итак, в итоге, вы могли (сейчас это невозможно сказать) performance_schemaлибо пропустили, либо испортили до исправления. Затем патч к 5.7.8 заставил движок считывать ваши переменные performance_schema(вместо того information_schema, откуда он их читал из-за поворота флага ON). Так как performance_schemaбыл поврежден, соединения не работают.

Выполнение обновления MySQL - лучший подход, несмотря на простои. Включение флага - это один из вариантов, но он имеет свой собственный набор последствий, как уже указывалось в этом потоке.

Оба должны работать, но взвесить последствия и знать свой выбор :)


1
Спасибо. Мне было интересно, что вызвало эту проблему, прежде чем прыгать и вносить изменения.
Кен Ингрэм

4

Выполните следующие шаги без -p:

  1. mysql_upgrade -u root
  2. systemctl restart mysqld

У меня была такая же проблема, и она работает!


Это работает! Только systemctl restart mysqldне сработало.
ниндзя

затем используйтеsystemctl restart mysql
BitDEVil2K16

1

В качестве шестидесятибитного вопроса, если ваш root-пользователь mysql выглядит неправильно настроенным, попробуйте установить расширение конфигуратора из официального источника mysql:

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

Это поможет вам установить новый пароль пользователя root.

Обязательно обновите свой репозиторий (debian / ubuntu):

apt-get update

0

Для моей системы проблема заключалась в том, что у меня все еще был установлен Mysql 5.6, и поэтому вызывался файл mysql_upgrade.exe из этой установки вместо того, который использовался для 5.7. Перейдите C:\Program Files\MySQL\MySQL Server 5.7\binи запустите.\mysql_upgrade.exe -u root


0

Если при использовании mysql_upgrade -u root -p --forceкоманды вы получаете эту ошибку:

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

просто добавьте sudoперед командой. Это сработало для меня, и я решил свою проблему. Итак, это: sudo mysql_upgrade -u root -p --force:)


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.