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