Количество столбцов mysql.user неверно. Ожидается 42, найдено 44. Возможно, таблица повреждена

В настоящее время я использую новейшую версию ISPConfig 3. Сегодня я хотел добавить db и пользователя. Это не сработало. Затем я попробовал это на PHPmyadmin, и это не сработало.

Когда я попытался добавить пользователя в панель пользователей PHPMyadmin, я получил следующее сообщение об ошибке:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом с '* TO' test '@' localhost '' в строке 1

Выход из /var/log/mysql/error.log:

[ERROR] Количество столбцов mysql.user неверно. Ожидаемый 42, найдено 44. Вероятно, таблица повреждена.

Mysql Версия: 5.5.55-0 + deb8u1 PHPMyadmin Версия: 4: 4.2.12-2 + deb8u2

Debian Linux 8

Ответ 1

У меня была такая же проблема, когда я обновил сервер mysql с 5.5 до 5.7 в Debian 8 (jessie). В редких случаях это, вероятно, происходит, если вы обновляете напрямую, минуя последовательности версий. (Многие люди делают это, но такие обновления официально не поддерживаются). В моем случае все работало нормально, когда я выполнил следующую команду:

mysql_upgrade --force -uroot -p

Я надеюсь, что это поможет вам

Ответ 2

При переходе с mariadb 10 на mysql 5.6 возникли аналогичные проблемы. Сообщение об ошибке, которое я получил, немного отличалось от других, перечисленных на этой странице... что, конечно, означает, что требовалось другое решение. При попытке изменить запись пользователя я получил следующую ошибку:

Неверное количество столбцов в mysql.user. Ожидается 43, найдено 46. Возможно, таблица повреждена

Некоторые из приведенных выше советов помогли решить проблему. Посмотрев на похожий сервер (на сервере mysql 5.6), я сравнил поля в "испорченной" пользовательской таблице (из таблицы mariadb 10 mysql.users) и "функциональной" пользовательской таблице в другом mysql. Таблица 5.6 mysql.users.

Я удалил три проблемных поля, используя mysql cli & следующие команды:

mysql -u root -p
use mysql;
alter table mysql.user drop column default_role;
alter table mysql.user drop column max_statement_time;
alter table mysql.user drop column password_expired;
quit

Проблема решена!

Ответ 3

это работа для меня

mysql_upgrade -uroot -p

и добавьте свой пароль root

Ответ 4

В моем случае и после рекомендации сообщения об ошибке я побежал:

[email protected]:/# mysql_upgrade -uroot -p***
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost                                  OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.user                                         OK
Upgrading the sys schema.
Checking databases.
[...]
Upgrade process completed successfully.
Checking if update is needed.

Это все решило.

Ответ 5

У нас была такая же проблема сегодня на debian (jessie) и еще одна ami linux box. Удаление столбца с истекшим паролем из таблицы пользователей mysql устранило проблему для меня.

mysql> alter table mysql.user drop column password_expired;

Ответ 6

Сегодня я столкнулся с той же проблемой после того, как я сделал dist-upgrade в ящике Debian Jessie 8. После некоторого расследования выяснилось, что структура таблицы mysql отличается от того, что ожидает mysql-5.5.55. Я просто сравнил поврежденную базу данных mysql с недавно установленной и создал небольшой файл патча, который должен исправить ошибку. Не уверен, что это работает и в других условиях. Поэтому будьте осторожны, используя этот патч и backup/var/lib/mysql и /etc/mysql, прежде чем делать что-то неприятное;) Я не беру на себя ответственности за любые убытки, которые могут возникнуть в результате этого патча. Используйте его на свой страх и риск.

Прежде всего, сделайте BACKUPS!! и еще больше BACKUPS!! например вы можете попробовать mysqlsafebackup (посмотрите https://github.com/VerboteneZone/MySQLSafeBackup), написанное мной шифрующее и сжимающее решение для резервного копирования MySQL.

Загрузите следующий патч в поле:

# wget https://download.rent-an.expert/mysql-patch-5.5.55.sql.gz

Удостоверьтесь, что ни один экземпляр в настоящее время не обращается к вашему серверу MySQL (останавливайте службы, такие как apache2, postfix или любой другой, обычно обращающийся к серверу MySQL). Если вы уверены, что вы одни в темноте, примените патч и принудительно обновите mysql с помощью следующих команд:

# zcat mysql-patch-5.5.55.sql.gz | mysql -uroot -p mysql
# mysql_upgrade --force -uroot -p

Если что-либо срабатывало без ошибок, перезапустите службу MySQL:

# service mysql stop
# service mysql start

После этого попробуйте создать testuser для просмотра, если исправление было применено правильно:

# mysql -uroot -p

СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'Testuser123' @'localhost' ИДЕНТИФИЦИРОВАНО 'Pass0worZ';

Вы должны получить сообщение типа:

Query OK, 0 строк (0.00 sec)

Теперь вы можете безопасно удалить свой testuser снова, используя:

DROP USER 'Testuser123' @'localhost';

В любом случае, если что-то пошло не так, восстановите резервную копию и повторите попытку;)

Надеюсь, что это поможет.

Ответ 7

Я переместился от mariadb до mysql, потому что мне не удалось изменить myriadb data directory на centos 7 x 64.

on mysql Когда я попытался добавить нового пользователя, кроме root. я получил

column count of mysql.user is wrong expected 45 found 48

Я попробовал

mysql_upgrade  -uroot -p

и

mysql_upgrade --force -uroot -p

но все же получил ту же ошибку. поэтому я пошел вперед и добавил new user manually в таблицу mysql.user, скопировав все данные из других строк, имеющих root имя пользователя.

restart service mysqld

и сделано.

Ответ 8

В моем случае, с Debian 8 и MySQL 5.5, mysql_upgrade --force -uroot -p не исправят проблему.

Сначала мне нужно было перейти на MySQL 5.6, а затем выполнить команду выше.

http://www.debiantutorials.com/install-mysql-server-5-6-debian-7-8/

Ответ 9

При переносе с mysql 5.5 на 5.7 (с помощью полного mysqldump и затем команды source) у меня была ошибка только тогда, когда я попытался отредактировать или добавить пользователя

ОШИБКА 1805 (HY000): Количество столбцов mysql.user неверно. Ожидаемые 45, найдено 42. Вероятно, таблица повреждена.

Как и некоторые другие, я сделал

sudo mysql_upgrade -u root -p #sudo, чтобы он мог написать журнал sudo

служба mysql restart

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

Ответ 10

Я столкнулся с тем же вопросом сегодня. Решение для меня состояло в том, чтобы вручную добавить отсутствующие столбцы в таблицу пользователя.

Остерегайтесь - используйте на свой страх и риск

Новые столбцы с mysql.5.5.55:

plugin, authentication_string, Create_tablespace_priv

Их нужно добавить в конкретном другом:

use mysql;
alter Table user ADD Create_tablespace_priv enum('N','Y')  DEFAULT 'N' NOT NULL AFTER Trigger_priv;
alter Table user ADD plugin char(64) DEFAULT '';
alter Table user ADD authentication_string text DEFAULT NULL;

После этого я смог снова изменить таблицу пользователя.

Ответ 11

После и обновления у меня было "Количество столбцов mysql.user неверно. Ожидаемое 45, найдено 46. Таблица, вероятно, повреждена" У меня были проблемы со входом в систему, поэтому я запустил базу данных:

mysqld --console --skip-grant-tables

вошел в систему и там был дополнительный столбец по сравнению с моей таблицей по умолчанию "Is_role", поэтому я удалил его:

ALTER TABLE 'user' DROP COLUMN 'is_role';

перезапустил mysqld и у нас все хорошо.

Ответ 12

Я наконец решил свою проблему следующим образом:

1) Запустите mysql: mysqld –-console –-skip-grant-tables –-skip-external-locking (держать терминал открытым)

2) Выполнить: mysqlcheck –-repair mysql user

Источник: https://forums.mysql.com/read.php?10,652134,652135#msg-652135

Ответ 13

Тихое сообщение об ошибке: Количество столбцов mysql.user неверно. Ожидаемое 42, найдено 43. Таблица, вероятно, повреждена.
Это не решение, а обход... Я скопировал все мои базы данных из mysql 5.5.55-0 + deb8u1 и восстановил их до mysql 5.7.18-0ubuntu0.16.04.1, пока эта ошибка не будет решена. Жесткая работа для обновления всех подключений, но полезно.

Ответ 14

85

J'ai eu le méme problème, j'ai mis à jour le servur mysql avec cette commande

mysql_upgrade --force -uroot -p