【发布时间】:2018-10-04 04:40:35
【问题描述】:
在我将 MySQL 5.7 升级到 MySQL 8.0 后,我再次启动 MySQL 并出现错误:尝试转储表空间时,指定为定义器的用户 ('mysql.infoschema'@'localhost') 不存在'。 我不明白为什么会出现这个问题。我想知道如何解决它
【问题讨论】:
标签: mysql
在我将 MySQL 5.7 升级到 MySQL 8.0 后,我再次启动 MySQL 并出现错误:尝试转储表空间时,指定为定义器的用户 ('mysql.infoschema'@'localhost') 不存在'。 我不明白为什么会出现这个问题。我想知道如何解决它
【问题讨论】:
标签: mysql
当我不小心将我的 MySQL 版本从 8 降级到 5.7 时,我遇到了同样的错误。在第一次启动时,旧版本破坏了某些东西,因此版本 8 显示了上述错误。 在我的情况下,我必须进入首先运行 MySQL 的 docker 容器
docker exec -it mysql bash
然后我基本上按照here的步骤进行
mysql -u root -p
mysql> SET GLOBAL innodb_fast_shutdown = 1;
mysql_upgrade -u root -p
这需要几分钟,但随后一切都恢复正常了。
【讨论】:
它可能会在您设置新系统后的一段时间后发生。
作为建议的解决方案,请在 Windows 上尝试
1) 以管理员身份打开cmd.exe
2) 运行mysql_upgrade.exe -uyour_user_name -pyour_password
mysql_upgrade.exe可以位于
C:\Program Files\MySQL\MySQL Server 8.0\bin
然后运行以下命令,看看是否出现了infoschema用户。
select user, host from mysql.user;
【讨论】:
mysql_upgrade 来自终端。
mysql_upgrade -u root 在 macOS high Sierra 中也为我工作
在我的情况下,这样的错误是因为我将 dba 用户的主机从 % 更改为 localhost 以增强安全性。
我使用带有 DDL 权限的“abcdba”来创建数据库模式,并使用带有 CURD 权限的“abc”来让 Web 服务使用数据库。更改后,读取操作正常,但写入操作失败,并在 OP 中显示错误消息。
刷新权限或重新启动服务器并没有解决问题。然后我将 dba 用户的主机改回 %.然后一切又恢复了正常。
显然mysql不喜欢dba用户host的变化,如果dba用户的host发生变化,该dba用户创建的现有数据库就会出现问题。
本质上,更改 dba 用户的主机实际上是删除用户 abcdba@% 并创建一个新用户 abcdba@localhost。这里出现了错误消息,因为 abcdba@% 和 abcdba@localhost 是 2 个不同的完全限定用户名。
【讨论】: