在我将MySQL 5.7升级到MySQL 8.0之后,我再次启动了MySQL并且出现了错误:在尝试转储表空间时,指定为定义者的用户('mysql.infoschema'@'localhost')不存在。 我不明白为什么会出现这个问题。我想知道如何解决它
答案 0 :(得分:162)
当我意外地将我的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
这需要几分钟但是一切都恢复了。
答案 1 :(得分: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 :(得分:0)
在我的情况下,这种错误是由于我将dba用户的主机从%更改为localhost所引起的。
我使用具有DDL权限的“ abcdba”来创建数据库模式,并使用具有CURD权限的“ abc”来使Web服务使用该数据库。更改后,读取操作正常,但写入操作失败,并在OP中显示错误消息。
刷新特权或重新启动服务器不能解决问题。然后,我将dba用户的主机更改回%。然后事情又恢复了正常。
显然,mysql不喜欢dba用户的主机的更改,并且如果dba用户的主机被更改,则由该dba用户创建的现有数据库将出现问题。
本质上,更改dba用户的主机实际上是在删除用户abcdba @%并创建一个新用户abcdba @ localhost。错误消息出现在这里,因为abcdba @%和abcdba @ localhost是2个完全限定的用户名。