Mysql
錯誤 1054 (42S22): ‘mysql.user’ 中的未知列 ‘plugin’
我正在嘗試為使用者授予新數據庫的權限
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.6
plugin
中的第 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.user
5.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 的權限後停止。