当尝试转储表空间时,出现了Mysql错误:“指定为定义者的用户('mysql.infoschema'@'localhost')不存在”。

51
我将MySQL 5.7升级到MySQL 8.0后重启MySQL,但是在尝试转储表空间时出现了错误:“在指定的定义者('mysql.infoschema'@'localhost')不存在"。我不明白这个问题为什么会出现,想知道如何解决它。
3个回答

170

我在不小心将MySQL版本从8降级到5.7时遇到了同样的错误。旧版本在第一次启动时出了问题,因此版本8显示了上述错误。 在我的情况下,我必须先进入运行MySQL的Docker容器。

docker exec -it mysql bash

我基本上按照这里的步骤进行了操作。

mysql -u root -p
mysql> SET GLOBAL innodb_fast_shutdown = 1;
mysql_upgrade -u root -p

这花了一些时间,但之后一切都恢复正常了。


1
谢谢。这对我很有用,它还解决了MySQL Workbench的问题,当我无法将其连接到mysql-server时。 - Dmitry S.
当我在OSX上使用Homebrew更新Maria时,我被锁在我的开发数据库之外。谢谢! - GregC
8
此回答同样适用于非基于Docker的MySQL安装。 - Gregory Ray

10

在您设置新系统之后可能会发生此问题。

作为建议的解决方案,请尝试在 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;

2
在Mac OS X上也能像个冠军一样工作吗?从终端运行mysql_upgrade - Ray Hunter
10
在我的macOS High Sierra上,mysql_upgrade -u root也适用于我。 - Sohair Ahmad

0
在我的情况下,这种错误是由于我将dba用户的主机从%更改为localhost以增强安全性所致。
我使用具有DDL权限的"abcdba"创建数据库模式,并使用具有CURD权限的"abc"用于Web服务使用数据库。更改后,读取操作正常,但写入操作失败并显示OP中的错误消息。
刷新权限或重新启动服务器无法解决问题。然后我将dba用户的主机更改回%。然后一切恢复正常。
显然,mysql不喜欢更改dba用户的主机,如果更改了dba用户的主机,则该用户创建的现有数据库将出现问题。
实质上,更改dba用户的主机实际上是删除用户abcdba@%并创建一个新用户abcdba@localhost。这里就出现了错误消息,因为abcdba@%和abcdba@localhost是两个完全不同的合格用户名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接