MySQL 错误 # 1133-在用户表中找不到任何匹配行

无法使用 3.5.2.2-phpMyAdmin5.5.27-MySQL设置用户密码。当以用户身份登录到 phpMyAdmin时,尝试设置密码时,会弹出以下错误:

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

以 root 身份登录时,成功地弹出以下密码集消息。

SET PASSWORD FOR 'user'@'%' = PASSWORD( '***' )

在这两种情况下,密码都不会设置,并保持为空。

183477 次浏览

原来,这个错误是非常模糊的!

1)以 root 身份登录时正在设置密码,因为它正在更新 MySql 下的 users 表中的 user/Password 字段。

2)以用户身份登录时,密码实际上并没有改变,即使在 MySql 的用户表中指定了一个密码,config.inc.php 文件也允许不使用密码进行身份验证。

解决方案:

Config.inc.php中更改 以下值为 false

$cfg['Servers'][$i]['AllowNoPassword'] = true;

这样就能看到

$cfg['Servers'][$i]['AllowNoPassword'] = false;

在 MySql 用户表中将用户的 主持人Any%更改为 localhost。这可以很容易地通过 PhpMyAdmin控制台实现。

这两个更改允许我以用户的密码进行身份验证,并禁止在没有密码的情况下进行身份验证。

它还允许用户在以用户身份登录时更改密码。

看起来所有的权限和其余的都被这两个更改修复了。

我在不同的上下文(不是在 phpMyAdmin 中)中使用 MySQL 时遇到了这个错误。对于 mysql.user 表中列出的特定现有用户,GRANT 和 SET PASSWORD 命令失败。对我来说,是跑步修复的

FLUSH PRIVILEGES;

此命令的 文件表示

从 mysql 数据库中的 Grant 表重新加载特权。

作为 GRANT 和 CREATEUSER 语句的结果,服务器将信息缓存在内存中。 相应的 REVOKE 和 DROPUSER 语句不释放此内存,因此 如果服务器执行导致缓存的语句的许多实例,则会出现 内存使用的增加。这个缓存内存可以通过 FLUSH 特权释放。

显然,用户表缓存达到了不一致的状态,导致了这个奇怪的错误消息。更多的信息是可用的 给你

如果您正在使用 PHPMyAdmin,则必须以 root 身份登录才能更改 root 密码。在用户把根比留空密码比更改您的密码。

我遇到了这个问题,但是在我的例子中,‘ phpmyadmin’用户的密码与 /etc/phpmyadmin/config-db.php的内容不匹配

一旦我更新了‘ phpmyadmin’用户的密码,错误就消失了。

以下是我采取的步骤:

  1. 以 root 身份登录 mysql: mysql -uroot -pYOUR_ROOT_PASS
  2. 更改为‘ mysql’db: use mysql;
  3. 更新“ phpmyadmin”用户的密码: UPDATE mysql.user SET Password=PASSWORD('YOUR_PASS_HERE') WHERE User='phpmyadmin' AND Host='localhost';
  4. 冲水特权: FLUSH PRIVILEGES;

成功了! ! 我成功了。

在我的例子中,我只是重命名了将要在基于 gui 的 db 工具(DbVisualizer)上更改密码的 Mysql 用户。我尝试“ SET PASSWORD”的终端不工作(MySQL Error # 1133)。

然而 这个答案对我来说很有用,即使在更改了密码之后,“ SET PASSWORD”命令仍然无法工作。

在关闭终端和打开新的一个命令工作得很好。

将 newdb. * 上的所有权限授予由“ password”标识的 newuser@localhost;

如果试图为不存在的用户授予特权,则可能发生此错误。

我不清楚 MySQL 如何看待一个不存在的用户。但我怀疑 MySQL 认为用户存在,如果它可以通过名称(列 User)和主机(列 Host)在 user表中找到的话。

如果试图向用户授予特权,这些特权可以通过用户的名称(列 User)找到,但不能通过用户的名称和主机(列 UserHost)找到,并且不提供密码,则会发生错误。

例如,下面的语句触发错误:

grant all privileges on mydb.* to myuser@'xxx.xxx.xxx.xxx';

这是因为没有指定密码,MySQL 无法创建新用户,因此会尝试查找现有用户。但是在 user表中找不到名为 myuser和主机 xxx.xxx.xxx.xxx的用户。

而提供密码则允许语句成功执行:

grant all privileges on mydb.* to myuser@'xxx.xxx.xxx.xxx' identified by 'mypassword';

如果新的“ MySQL 用户”是相同的“应用程序用户”,确保重用您认为存在的那个用户的相同密码。

通过刷新特权来完成操作:

flush privileges;

我认为答案就在这里: https://bugs.mysql.com/bug.php?id=83822

所以,你应该写:

将 mydb. * 上的所有特权授予 myuser@‘ xxx.xxx.xxx.xxx’;

我认为这可能是工作:

设置 myuser@‘ xxx.xxx.xxx.xxx’的密码(IDENTIFIED BY‘ old _ PASSWORD’= PASSWORD (‘ new _ PASSWORD’)) ;

阐述 斯蒂芬的回答

当我试图通过运行以下命令将特定数据库的远程连接权限授予 MySQL 服务器上的 root用户时,我得到了这个错误:

USE database_name;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

这里出现了一个错误:

ERROR 1133 (42000): Can't find any matching row in the user table

我是这样修复它的:

首先,确认 MySQL服务器允许远程连接。使用首选文本编辑器打开 MySQL 服务器配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

向下滚动到 绑定地址绑定地址行,确保它是 评论或者用 0.0.0.0替换(以允许所有远程连接) ,或者用需要远程连接的 Ip-地址替换。

进行必要的更改后,保存并退出配置文件。通过重新启动 MySQL 服务应用对 MySQL 配置文件所做的更改:

sudo systemctl restart mysql

接下来,登录到安装的服务器上的 MySQL 服务器控制台:

mysql -u root -p

输入 Mysql 用户密码

检查您想要访问的用户已经访问的 接待员。在我的例子中,用户是 root:

SELECT host FROM mysql.user WHERE user = "root";

这给了我这样的输出:

+-----------+
| host      |
+-----------+
| localhost |
+-----------+

接下来,我运行了下面的命令,这个命令类似于前一个抛出错误的命令,但是请注意,这次我向它添加了一个密码:

USE database_name;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'my-password';

注意 : %授予来自网络上所有主机的用户远程访问权限。您可以使用命令 GRANT ALL PRIVILEGES ON *.* TO 'root'@'Ip-Address' IDENTIFIED BY 'my-password';指定要授予用户访问权限的各个主机的 ip-Address

然后我检查了用户现在可以访问的 接待员。在我的例子中,用户是 root:

SELECT host FROM mysql.user WHERE user = "root";

这给了我这样的输出:

+-----------+
| host      |
+-----------+
| %         |
| localhost |
+-----------+

最后,您可以尝试使用以下命令从另一台服务器连接到 MySQL 服务器:

mysql -u username -h mysql-server-ip-address -p

代表 使用者代表 Mysql-server-ip-addressP代表 密码,所以在我的例子中是:

mysql -u root -h 34.69.261.158 -p

输入 Mysql 用户密码

您应该根据 MySQL服务器版本获得以下输出:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.31 MySQL Community Server (GPL)


Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql>

资源 : 如何允许远程连接到 MySQL

仅此而已。

希望这个能帮上忙

对于像我这样犯错的人来说。

我在使用命令

SET PASSWORD FOR root = 'elephant7'

更新 root 用户的密码,我得到了同样的错误。我试了上面提到的所有答案,但没有成功,然后经过一点点的搜索,我找到了答案,

MySQL 帐户名由用户名和主机名组成。这允许为可以从不同主机连接的同名用户创建帐户。

https://dba.stackexchange.com/频道

然后我使用了命令

SET PASSWORD FOR 'root'@'localhost'=PASSWORD('mynewpasword');

在这里,'root'@'localhost'完成了任务,命令也起作用了。

希望这对某些人有好处。