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

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

Table 'performance_schema.session_variables' doesn't exist

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

Ответ 1

Для меня также работал mysql_upgrade:

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

С уважением, МСЗ.

Ответ 2

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

mysql_upgrade -u root -p --force

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

Ответ 4

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

Да, решение состоит в том, чтобы выполнить команду обновления 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 - лучший подход, несмотря на простои. Включение флага - это один из вариантов, но он имеет свои собственные последствия, как уже указывалось в этом потоке.

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

Ответ 5

Выполните следующие действия без -p:

  1. mysql_upgrade -u root
  2. systemctl restart mysqld

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

Ответ 6

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

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

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

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

apt-get update

Ответ 7

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

Ответ 8

Если при использовании команды 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 :)