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

时间:2012-10-13 22:08:01

标签: mysql phpmyadmin

无法使用 3.5.2.2 - phpMyAdmin 5.5.27 - MySQL 设置用户的密码。在以用户身份登录phpMyAdmin时尝试设置密码时,会弹出以下错误:

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

以root身份登录时,会弹出以下密码设置成功消息。

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

在任何一种情况下,密码都不会设置并保持当前状态,为空白。

10 个答案:

答案 0 :(得分:90)

我在不同的上下文中使用MySQL遇到了这个错误(不在phpMyAdmin中)。 GRANT和SET PASSWORD命令在mysql.user表中列出的特定现有用户上失败。就我而言,它是通过运行

来修复的
FLUSH PRIVILEGES;

此命令的documentation表示

  

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

     

作为GRANT和CREATE USER语句的结果,服务器将信息缓存在内存中。   相应的REVOKE和DROP USER语句不会释放此内存,因此   一个服务器执行导致缓存的语句的许多实例,会有   增加内存使用量。可以使用FLUSH PRIVILEGES释放此缓存的内存。

显然用户表缓存已达到不一致状态,导致出现这种奇怪的错误消息。有关详细信息,请here

答案 1 :(得分:10)

我遇到了这个问题,但在我的情况下,'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;
  5. DONE !!它对我有用。

答案 2 :(得分:8)

如果尝试为非现有用户授予权限,则会发生此错误。

我不清楚MySQL认为什么是非现有用户。但我怀疑MySQL认为用户存在,如果可以通过User表中的名称(列Host)和主机(列user)找到它。

如果尝试向可以使用其姓名(列User)但未通过其姓名和主持人(列UserHost)找到的用户授予权限,而不是提供密码,然后发生错误。

例如,以下语句触发错误:

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

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

虽然提供密码,但允许语句成功执行:

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

确保重用您认为存在的用户的相同密码,如果新的" MySQL用户"是#34;应用程序用户"。

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

flush privileges;

答案 3 :(得分:5)

事实证明,错误确实很模糊!

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

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

解决方案:

更改以下值 config.inc.php 中的 false

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

读取

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

将用户的主机 Any % 更改为 MySql用户表中的localhost 。这可以通过 phpMyAdmin 控制台轻松实现。

这两项更改允许我使用密码验证用户身份,不允许使用密码验证身份验证。

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

似乎所有权限,其余的修复了这两个更改。

答案 4 :(得分:0)

如果您使用的是PHPMyAdmin,则必须以root身份登录才能更改root密码。在用户输入root而不是保留密码空白而不是更改密码。

答案 5 :(得分:0)

将newdb。*全部授予newuser @ localhost,用密码';

标识

答案 6 :(得分:0)

Stephane's answer上进行阐述。

当我尝试通过运行以下命令向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';

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

此后,我检查了用户现在可以访问的主机。在我的情况下,用户为root

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

这给了我这个输出:

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

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

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

其中 u 表示用户 h 表示 mysql-server-ip-address p 表示密码。所以在我的情况下是:

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> 

资源How to Allow Remote Connections to MySQL

仅此而已。

我希望这会有所帮助

答案 7 :(得分:0)

对于像我这样犯错的人。

我正在使用命令

SET PASSWORD FOR root = 'elephant7'

更新 root 用户的密码,我遇到了同样的错误。我在所有答案中尝试了上面提到的所有内容,但没有成功,然后在搜索了一下之后我找到了答案,

<块引用>

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

https://dba.stackexchange.com/

然后我使用了命令

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

这里 'root'@'localhost' 成功了,命令也奏效了。

希望这对某人有益。

答案 8 :(得分:-1)

在我的情况下,我刚刚重命名了Mysql用户,该用户将在基于gui的数据库工具(DbVisualizer)上更改密码。我试图在这个终端设置密码&#39;不起作用(MySQL错误#1133)。

然而,this answer为我工作,即使在更改密码之后,“设置密码”也是如此。命令还没有用。

关闭终端并打开新终端后,命令运行良好。

答案 9 :(得分:-1)

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

所以,你应该写:

将mydb。*上的所有特权授予myuser @&#39; xxx.xxx.xxx.xxx&#39;通过&#39; mypassword&#39;;

识别

我认为这可行:

为myuser设置密码@&#39; xxx.xxx.xxx.xxx&#39;通过&#39; old_password&#39;识别= PASSWORD(&#39; new_password&#39;);