我安装了Debian Stretch和新安装的Mysql 8.0(配置尚未更改)。当我尝试使用以下命令创建新用户时:
mysql> CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'xyz';
我得到以下信息:
错误 1726 (HY000):存储引擎“MyISAM”不支持系统表。[mysql.db]
关于问题可能是什么的任何建议?
谢谢
我安装了Debian Stretch和新安装的Mysql 8.0(配置尚未更改)。当我尝试使用以下命令创建新用户时:
mysql> CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'xyz';
我得到以下信息:
错误 1726 (HY000):存储引擎“MyISAM”不支持系统表。[mysql.db]
关于问题可能是什么的任何建议?
谢谢
正如@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,那总是最好的。
不要运行 alter table 来强制将 mysql.db 更改为 innodb。您最终会遇到不同的错误,例如“无法从 mysql.db 加载”。该表可能已损坏'。如果您确实这样做了,那么以下内容也将解决该问题。
我将转储从 5.7 恢复到新的 8.0 服务器,然后遇到了这个问题。
要修复它,请停止 mysql 服务,然后运行此命令以使 mysql 8 升级内部架构:
mysqld --upgrade=FORCE
您可以查看日志以查看其进度以及是否有任何错误。
您或许应该考虑离开 MyISAM。InnoDB 是 MySQL 自 5.6 以来的默认引擎,MySQL 8.0 将是最后一个对其提供有限支持的版本。
在全新安装 MySQl 8.0 然后重新加载旧的(v 5.7)转储文件后,我遇到了同样的问题。解决方案是删除并重新安装 MySQL,这次从 5.7 MySQL 创建了一个新的转储文件,其中仅包含我自己的表,不包括系统表,并将它们导入 v 8.0 MySQL。一切都完美无缺。
不同的解决方案:我有一个 MySQL 5.7 中所有数据库的 MySQL 转储,包括 mysql 表。导入整个转储文件夹(包括这个 mysql 表)后,我得到了这个错误。在完全重新安装 MySQL 8.0.21 并从转储文件夹中删除 mysql 表后,一切都按预期工作。