将 mysql 从 5.6 升级到 5.7 后“在用户表中找不到任何匹配的行”

Posted

技术标签:

【中文标题】将 mysql 从 5.6 升级到 5.7 后“在用户表中找不到任何匹配的行”【英文标题】:"Can't find any matching row in the user table" after upgrading mysql from 5.6 to 5.7 【发布时间】:2019-05-21 12:25:40 【问题描述】:

我收到此错误:

在用户表中找不到任何匹配的行

尝试执行我的 CI 脚本的这一行时:

GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'host' WITH GRANT OPTION;

我知道已经有人问过类似的问题:

Can't find any matching row in the user table

mysql Error #1133 - Can't find any matching row in the user table

https://dba.stackexchange.com/questions/69921/error-code-1133-cant-find-any-matching-row-in-the-user-table

但是,他们都没有解决我的问题。

特别是在我的情况下,这个问题是在我将我的 travis-ci 从使用 ubuntu 14.04 升级到 16.04 之后开始的,这也将 MySQL 版本从 5.6 更改为 5.7

所以我确信相同的代码适用于 MySQL 5.6,但不适用于 MySQL 5.7。

可能是什么问题?

【问题讨论】:

您是否正在尝试创建新用户名?你应该先使用CREATE USER @barmar 为什么 mysql 5.6 不需要它? 其实我想到的变化是在 MySQL 8.0,而不是 5.7。他们删除了使用GRANT 创建用户的功能。所以我认为这应该在 5.7 中起作用。 @Barmar 您的解决方案解决了这个问题,您想将其作为正常答案发布以便我接受吗? 【参考方案1】:

在 MySQL 5.7 中,他们更改了默认 SQL 模式以包含 NO_AUTO_CREATE_USER。这会阻止GRANT 创建用户,因此您必须改用CREATE USER。您还可以从服务器的 SQL 模式中删除此设置。

此更改是为 8.0 做准备,它完全删除了 GRANT 创建用户的能力。

【讨论】:

以上是关于将 mysql 从 5.6 升级到 5.7 后“在用户表中找不到任何匹配的行”的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 从 5.6 升级到 5.7 的 Grails 更改

mysql从5.6升级到5.7后出现 Expression #1 of ORDER BY clause is not in SELECT list,this is incompatible with

将 MySQL 5.6 升级到 5.7

如何将 AWS RDS Aurora MySQL 5.6 升级到 5.7

Laravel 从 5.5 升级到 5.6 到 5.7:未捕获 ReferenceError: axios is not defined

laravel 从 5.6 作曲家升级到 5.7 不起作用