Какие столбцы MySQL 5.5 ожидает в своей таблице mysql.users? - PullRequest
0 голосов
/ 21 декабря 2018

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

ERROR 1547 (HY000): Column count of mysql.user is wrong. Expected 42, found 39. The table is probably corrupted

Я использую Ubuntu 14.04, а SELECT version(); говорит мне, что я использую MySQL v 5.5 (5.5.62-0ubuntu0.14.04.1, изначально установлен как 5.5.46-0ubuntu0.14.04.2).

Эти вопросы о переполнении стека показывают, что лучшим решением является запуск mysql_upgrade:

Мой многолетний опыт работы с неиспользуемым мусором, который является программным обеспечением с открытым исходным кодом, позволяет мне заранее предсказать, что это не будетРабота.Но я все равно пробую:

$ mysql_upgrade -u root -p
Enter password: 
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock' 
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock' 
...
FATAL ERROR: Error during call to mysql_check for upgrading the tables names.

Сбой с бесполезным сообщением об ошибке.

Из приведенных выше ссылок второе наиболее успешное решение - вручную настроить таблицу mysql.users наудовлетворить все, что ожидает жалоба.В этом случае это означает, что мне нужно определить, какие три столбца мне нужно добавить в мою таблицу mysql.users (в которой DESCRIBE mysql.users подтверждает только 39 столбцов).

Есть ли способ точно узнать, какие столбцыMySQL v5.5 ожидает, что его таблица mysql.users будет иметь?Поиск в Интернете ничего не дал, и документы, которые я нашел, не доходят до такого уровня детализации.

Редактировать

На основании информации, предоставленной в принятомответ, я могу определить три пропущенных столбца как Create_tablespace_priv, plugin и authentication_string.Добавление их с помощью

ALTER TABLE mysql.user ADD COLUMN Create_tablespace_priv ENUM('N','Y') AFTER Trigger_priv;

ALTER TABLE mysql.user ADD COLUMN plugin CHAR(64) NULL AFTER max_user_connections;

ALTER TABLE mysql.user ADD COLUMN authentication_string text NULL Default NULL AFTER plugin;

позволяет мне успешно выполнить команду GRANT ALL PRIVILEGES.

...