Количество столбцов 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