8

我安装了Debian Stretch和新安装的Mysql 8.0(配置尚未更改)。当我尝试使用以下命令创建新用户时:

mysql> CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'xyz';

我得到以下信息:

错误 1726 (HY000):存储引擎“MyISAM”不支持系统表。[mysql.db]

关于问题可能是什么的任何建议?

谢谢

4

5 回答 5

11

正如@Mae 下面建议的那样,请确保在执行任何这些步骤之前停止服务器。

正如@Sarel 建议的那样,该解决方案执行了我在下面执行的所有步骤,但使用了 MySQL 方式,这可能是最安全的。

mysqld --upgrade=FORCE

https://dev.mysql.com/doc/refman/8.0/en/server-options.html#option_mysqld_upgrade

服务器升级数据字典、Performance Schema 和 INFORMATION_SCHEMA

谢谢,@Sarel!

我以前的帖子用于历史用途:

我已经将数据库备份恢复到我的新开发 MySQL 8 系统中,没有考虑并覆盖了 MySQL 数据库表。修复它并不难,但只是花了一段时间对它进行了一些修改,这就是修复它的原因。

alter table mysql.db ENGINE=InnoDB;
alter table mysql.columns_priv ENGINE=InnoDB;

之后,我能够毫无问题地创建用户。

关键在错误消息中。

ERROR 1726 (HY000): Storage engine 'MyISAM' does not support system tables. [mysql.db]

所以我知道 mysql.db 是 MyISAM 并且需要其他东西,所以我只是将其更改为 InnoDB。

希望对某人有所帮助!

如果您的 MySQL 数据库是错误的类型,则可以使用,或者其他替代方法是初始化您的数据库

mysqld --initialize

这将重新创建这一切。如果您可以在执行此操作之前转储 SQL,那总是最好的。

于 2019-04-24T21:01:36.510 回答
4

不要运行 alter table 来强制将 mysql.db 更改为 innodb。您最终会遇到不同的错误,例如“无法从 mysql.db 加载”。该表可能已损坏'。如果您确实这样做了,那么以下内容也将解决该问题。

我将转储从 5.7 恢复到新的 8.0 服务器,然后遇到了这个问题。

要修复它,请停止 mysql 服务,然后运行此命令以使 mysql 8 升级内部架构:

mysqld --upgrade=FORCE

您可以查看日志以查看其进度以及是否有任何错误。

于 2021-03-02T17:31:25.553 回答
3

您或许应该考虑离开 MyISAM。InnoDB 是 MySQL 自 5.6 以来的默认引擎,MySQL 8.0 将是最后一个对其提供有限支持的版本。

您可以在Percona 博客文章中阅读详细信息

于 2019-01-21T15:23:57.213 回答
2

在全新安装 MySQl 8.0 然后重新加载旧的(v 5.7)转储文件后,我遇到了同样的问题。解决方案是删除并重新安装 MySQL,这次从 5.7 MySQL 创建了一个新的转储文件,其中仅包含我自己的表,不包括系统表,并将它们导入 v 8.0 MySQL。一切都完美无缺。

于 2020-06-22T14:58:49.057 回答
0

不同的解决方案:我有一个 MySQL 5.7 中所有数据库的 MySQL 转储,包括 mysql 表。导入整个转储文件夹(包括这个 mysql 表)后,我得到了这个错误。在完全重新安装 MySQL 8.0.21 并从转储文件夹中删除 mysql 表后,一切都按预期工作。

于 2020-10-07T18:29:28.563 回答