Таблиця '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щоб переконатися, що якісь зміни в основних таблицях / dbs були зроблені?
Марк Б

так, я зробив 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

Myql_upgrade працював і для мене:

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

З повагою, мсз.


25
Мені потрібно було перезапустити mysqld ( mysql.server restartоскільки я використовую домашню програму установки на 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
Це добре спрацювало. Дякую.Я хочу знати, що в чому причина.
копання

2
Я отримую, Access denied for user 'root'@'localhost' (using password: YES) while connecting to the MySQL serverхоча я використовую правильний пароль root. Будь-яка допомога ?? : - /
шістдесят біт

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
DEVY

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

@katzmopolitan Читайте тут: dev.mysql.com/doc/refman/5.7/en / ... . Зміни в основному пов'язані з обробкою INFORMATION_SCHEMA (безпека тощо), але є й інші.
Tuncay Göncüoğlu

Це працювало і для мене. Повідомлення про помилку, яке я отримав, було від mysqldump. Одного разу я зробив запропоновану зміну. Після того, як у мене був дамп, я просто змінив show_compatibility_56 назад на OFF.
Брайан

23

Оскільки жодна з вищезгаданих відповідей насправді не пояснює, що сталося, я вирішив задзвонити та донести ще деякі деталі до цього питання.

Так, рішення полягає у виконанні команди MySQL Upgrade наступним чином: mysql_upgrade -u root -p --force але що сталося?

Першопричиною цього питання є корупція performance_schema, яку можуть спричинити:

  • Органічна корупція (томи, які стають кабумом, помилка двигуна, проблема з драйвером ядра тощо)
  • Пошкодження під час mysql Patch (не чутно, щоб це сталося під час роботи з патчем mysql, спеціально для великих оновлень версій)
  • Проста "drop_dutform_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.