mysql.user的列数是错误的.预计42,发现44.该表可能已损坏

Ser*_*us1 39 mysql

目前我正在使用最新版本的ISPConfig 3.今天我想添加一个数据库和用户.它没用.然后我在PHPmyadmin上尝试了它并且它不起作用.

当我尝试在PHPMyadmin用户面板中添加用户时,我收到以下错误消息:

您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在第1行'*''测试'@'localhost''附近使用正确的语法

/var/log/mysql/error.log的输出:

[错误] mysql.user的列数错误.预计42,发现44.该表可能已损坏

Mysql版本:5.5.55-0 + deb8u1 PHPMyadmin版本:4:4.2.12-2 + deb8u2

Debian Linux 8

Cor*_*ter 101

当我在Debian 8(jessie)中将mysql服务器从5.5更新到5.7时,我遇到了同样的问题.在极少数情况下,如果您直接更新绕过版本序列,则可能会发生这种情况.(许多人这样做,但这种更新并未获得官方支持).在我的情况下,当我执行follow命令时它工作正常:

mysql_upgrade --force -uroot -p
Run Code Online (Sandbox Code Playgroud)

我希望这能帮到您


jad*_*dik 27

从mariadb 10迁移到mysql 5.6也遇到了类似的问题.我收到的错误消息与此页面上列出的其他消息略有不同......当然,这意味着它需要一个不同的解决方案.在尝试修改用户记录时,我收到以下错误:

mysql.user的列数是错误的.预计43,发现46.该表可能已损坏

上面的一些建议有助于解决问题.在看了一个类似的服务器(到mysql 5.6之后)之后,我比较了"corrupted"用户表(来自mariadb 10 mysql.users表)和其他mysql中的"functional"用户表中的字段. 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
Run Code Online (Sandbox Code Playgroud)

问题解决了!

  • 这样做要小心。确保仅在知道有 3 个额外列时才执行此操作。还是有风险的。 (2认同)

小智 17

对我来说很烦人

mysql_upgrade -uroot -p
Run Code Online (Sandbox Code Playgroud)

并添加您的密码根目录


tok*_*fsj 6

在我的情况下,并按照错误消息的建议,我运行:

root@mysql-190877524-gm3j4:/# 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.
Run Code Online (Sandbox Code Playgroud)

这解决了一切.


小智 0

安静相同的错误消息: mysql.user 的列计数错误。预期为 42,发现为 43。该表可能已损坏。
这不是解决方案,而是一种规避...我从mysql 5.5.55-0+deb8u1备份了所有数据库并将它们恢复到mysql 5.7.18-0ubuntu0.16.04.1,直到这个错误没有解决。更新所有连接很困难,但很有用。