在尝试向用户授予新数据库的特权时,出现错误
ERROR 1547 (HY000): Column count of mysql.user is wrong. Expected 42, found 39. The table is probably corrupted
我正在使用Ubuntu 14.04,SELECT version();
告诉我我正在使用MySQL v 5.5(5.5.62-0ubuntu0.14.04.1
,最初安装为5.5.46-0ubuntu0.14.04.2
)。
这些堆栈溢出问题表明,最佳解决方案是运行mysql_upgrade
:
我多年处理开源软件无法使用的垃圾的经验使我能够提前预测到这是行不通的。但是我还是尝试一下:
$ mysql_upgrade -u root -p
Enter password:
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock'
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock'
...
FATAL ERROR: Error during call to mysql_check for upgrading the tables names.
它失败,并显示无用的错误消息。
通过以上链接,第二成功的解决方案是手动调整mysql.users
表以满足投诉的期望。在这种情况下,这意味着我需要确定需要添加到mysql.users
表中的哪三列(DESCRIBE mysql.users
确认只有39列)。
是否有办法确切知道MySQL v5.5期望其mysql.users
表具有哪些列?网页搜索什么也没发现,我发现的文档没有详细介绍。
修改
基于接受的答案中提供的信息,我可以将缺少的三列标识为Create_tablespace_priv
,plugin
和authentication_string
。用
ALTER TABLE mysql.user ADD COLUMN Create_tablespace_priv ENUM('N','Y') AFTER Trigger_priv;
ALTER TABLE mysql.user ADD COLUMN plugin CHAR(64) NULL AFTER max_user_connections;
ALTER TABLE mysql.user ADD COLUMN authentication_string text NULL Default NULL AFTER plugin;
允许我成功执行GRANT ALL PRIVILEGES
命令。