如何修复 ERROR 1726 (HY000):存储引擎“MyISAM”不支持系统表。在 CREATE USER 之后的 Mysql 8.0
Posted
技术标签:
【中文标题】如何修复 ERROR 1726 (HY000):存储引擎“MyISAM”不支持系统表。在 CREATE USER 之后的 Mysql 8.0【英文标题】:How to fix ERROR 1726 (HY000): Storage engine 'MyISAM' does not support system tables. in Mysql 8.0 after CREATE USER 【发布时间】:2019-06-14 23:48:32 【问题描述】:我安装了 Debian Stretch 和新安装的 Mysql 8.0(配置尚未更改)。当我尝试使用以下方式创建新用户时:
mysql> CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'xyz';
我得到了以下信息:
ERROR 1726 (HY000):存储引擎“MyISAM”不支持系统 表。 [mysql.db]
关于问题可能是什么的任何建议?
谢谢
【问题讨论】:
【参考方案1】:您或许应该考虑离开 MyISAM。 InnoDB 是 MySQL 自 5.6 以来的默认引擎,MySQL 8.0 将是最后一个对其提供有限支持的版本。
您可以在this Percona blog post阅读详细信息
【讨论】:
升级后是否运行了升级脚本?它应该已将系统表更改为 InnoDB。 它是全新安装,没有数据迁移。我刚刚加载了一个数据库(来自 5.6 的转储),其中所有表都在 InnoDB 中并尝试创建新用户。 是整个数据库的转储还是您自己的模式?如果是整个数据库,转储中的系统表可能会覆盖安装中的系统表。 这是自己的架构。我注意到系统表确实在 MyISAM 中。我通过重新安装 Mysql 对问题进行了排序。重新安装后表是 InnoDB,我成功创建了用户并加载了相同的数据库转储。我不能说究竟是什么将系统表更改为 MyISAM。第一次尝试的唯一变化是加载失败,因为 ROW_FORMAT=FIXED 由少数自己的表在转储中(使用 sed -ie 's/ROW_FORMAT=FIXED//g' 排序)。【参考方案2】:正如@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,那总是最好的。
【讨论】:
要小心。您最终可能会看到“无法从 mysql.db 加载。表可能已损坏” 我刚刚得到了 mysql.db 表的“损坏”状态。 :(关于如何解决这个问题的任何想法? 同样的问题,有人修复了吗? 如果您的 mysql 数据库已损坏,您可以随时使用 mysqld --initialize 重新创建它 要修复损坏的数据库错误,请参阅下面的答案。【参考方案3】:在全新安装 MySQl 8.0 然后重新加载旧的 (v 5.7) 转储文件后,我遇到了同样的问题。 解决方案是删除并重新安装 MySQL,这次从 5.7 MySQL 创建了一个新的转储文件,其中仅包含我自己的表,不包括系统表,并将它们导入 v 8.0 MySQL。一切都完美无缺。
【讨论】:
【参考方案4】:不同的解决方案: 我有一个 MySQL 5.7 中所有数据库的 MySQL 转储,包括 mysql 表。导入整个转储文件夹(包括这个 mysql 表)后,我得到了这个错误。 在完全重新安装 MySQL 8.0.21 并从转储文件夹中删除 mysql 表后,一切都按预期工作。
【讨论】:
mysql
是数据库,而不是表。【参考方案5】:
不要运行 alter table 来强制将 mysql.db 更改为 innodb。您最终会遇到不同的错误,例如“无法从 mysql.db 加载”。该表可能已损坏'。如果您确实这样做了,以下内容也将解决此问题。
我将转储从 5.7 恢复到新的 8.0 服务器,然后遇到了这个问题。
要修复它,请停止 mysql 服务,然后运行此命令以使 mysql 8 升级内部架构:
mysqld --upgrade=FORCE
您可以查看日志以查看其进度以及是否有任何错误。
【讨论】:
我喜欢这个答案,我从未见过这个选项。哪个版本的 MySQL 发布的? 没有线索。我只在其他网站上看到过一次提及它,但没有关于它是否有效的报告。就我而言,它确实有效。以上是关于如何修复 ERROR 1726 (HY000):存储引擎“MyISAM”不支持系统表。在 CREATE USER 之后的 Mysql 8.0的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“ERROR 130 (HY000):文件格式不正确”
ERROR 2003 (HY000): Can’t connect to MySQL server on ‘127.0.0.1’ (111) 修复无法连接到MySQL服务器
MySQL报错ERROR1872(HY000):Slave failed to initialize
Mac mySql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/my