Mysql

錯誤 1054 (42S22): ‘mysql.user’ 中的未知列 ‘plugin’

  • July 12, 2017

我正在嘗試為使用者授予新數據庫的權限

mysql> grant all on db_test.* to 'user_test'@'localhost' identified by 'usersexistingpassword';

我收到以下錯誤

ERROR 1054 (42S22): Unknown column 'plugin' in 'mysql.user'

我正在使用 MySQL 5.6

mysql> select @@version;
+-------------+
| @@version   |
+-------------+
| 5.6.24-72.2 |
+-------------+
1 row in set (0.00 sec)

我確實在 MySQL 上找到了一篇關於在 5.6.x 及更高版本上更新本機密碼的文章

6.3.9.3 從 Pre-4.1 密碼散列和 mysql_old_password 外掛遷移 https://dev.mysql.com/doc/refman/5.7/en/account-upgrades.html

我以root身份執行了他們推薦的命令

mysql> UPDATE mysql.user SET plugin = 'mysql_native_password'
   -> WHERE plugin = '' AND (Password = '' OR LENGTH(Password) = 41);
ERROR 1054 (42S22): Unknown column 'plugin' in 'where clause'

您的問題與mysql.user升級到 MySQL 5.6 的方式有關

如果您以 root 身份查看我對無法授予特權的回答,我將向您展示mysql.user從 MySQL 4.1 到 MySQL 5.6 的描述。

該列是MySQL 5.5/5.6plugin中的第 41 列mysql.user

mysql> SELECT column_name,ordinal_position FROM information_schema.columns
   -> WHERE table_schema='mysql' and table_name='user' and column_name='plugin';
+-------------+------------------+
| column_name | ordinal_position |
+-------------+------------------+
| plugin      |               41 |
+-------------+------------------+
1 row in set (0.04 sec)

mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.6.24    |
+-----------+
1 row in set (0.02 sec)

mysql>

該列不會出現在 MySQL 5.1、5.0 或 4.x 中。這告訴我的是,MySQL 以某種方式升級到了 5.6,但仍然具有mysql.user5.1 或更早的版本。

如果你跑了SELECT COUNT(1) column_count FROM information_schema.columns WHERE table_schema='mysql' AND table_name='user';,你得到 39,我正好給你解決辦法。

請參閱我的文章MySQL 服務在嘗試向使用者授予有關如何從 5.1 直接修復mysql.user到 5.6 的權限後停止。

引用自:https://dba.stackexchange.com/questions/103723