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

Tum*_*den 48 mysql phpmyadmin

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

#1133 - Can't find any matching row in the user table
Run Code Online (Sandbox Code Playgroud)

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

SET PASSWORD FOR 'user'@'%' = PASSWORD( '***' )
Run Code Online (Sandbox Code Playgroud)

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

pdg*_*137 91

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

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

该命令的文档说明

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

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

显然,用户表缓存已达到不一致状态,导致此奇怪的错误消息.更多信息可在此处获得.

  • 我从备份导入用户后为我做了诀窍! (7认同)

e.t*_*psy 12

我遇到了这个问题,但在我的情况下,'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;

DONE!它对我有用.


Ste*_*ane 11

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

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

如果尝试向用户授予可以使用其名称(列User)但不能通过其名称和主机(列UserHost)找到的权限,并且未提供密码,则会发生错误.

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

grant all privileges on mydb.* to myuser@'xxx.xxx.xxx.xxx';
Run Code Online (Sandbox Code Playgroud)

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

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

grant all privileges on mydb.* to myuser@'xxx.xxx.xxx.xxx' identified by 'mypassword';
Run Code Online (Sandbox Code Playgroud)

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

通过刷新权限完成操作:

flush privileges;
Run Code Online (Sandbox Code Playgroud)

  • 我要强调这句话:**但是我怀疑如果可以通过用户表中的名称(User 列)和主机(Host 列)找到一个用户,MySQL 就会认为该用户存在。** (2认同)

Pro*_*ton 6

阐述斯蒂芬的回答

root当我尝试通过运行以下命令向 MySQL 服务器上的用户授予特定数据库的远程连接权限时,出现此错误:

USE database_name;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
Run Code Online (Sandbox Code Playgroud)

这给出了一个错误:

ERROR 1133 (42000): Can't find any matching row in the user table
Run Code Online (Sandbox Code Playgroud)

这是我修复它的方法

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

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Run Code Online (Sandbox Code Playgroud)

向下滚动到绑定地址行,并确保将其注释掉或替换为0.0.0.0(以允许所有远程连接)或替换为您想要远程连接的Ip 地址。

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

sudo systemctl restart mysql
Run Code Online (Sandbox Code Playgroud)

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

mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

输入你的mysql用户密码

检查您想要的用户已经有权访问的主机。就我而言,用户是root

SELECT host FROM mysql.user WHERE user = "root";
Run Code Online (Sandbox Code Playgroud)

这给了我这个输出:

+-----------+
| host      |
+-----------+
| localhost |
+-----------+
Run Code Online (Sandbox Code Playgroud)

接下来,我运行下面的命令,该命令与上一个引发错误的命令类似,但请注意,这次我为其添加了密码:

USE database_name;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'my-password';
Run Code Online (Sandbox Code Playgroud)

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

之后我检查了用户现在可以访问的主机。就我而言,用户是root

SELECT host FROM mysql.user WHERE user = "root";
Run Code Online (Sandbox Code Playgroud)

这给了我这个输出:

+-----------+
| host      |
+-----------+
| %         |
| localhost |
+-----------+
Run Code Online (Sandbox Code Playgroud)

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

mysql -u username -h mysql-server-ip-address -p
Run Code Online (Sandbox Code Playgroud)

其中u代表用户h代表mysql-server-ip-addressp代表密码。所以就我而言是:

mysql -u root -h 34.69.261.158 -p
Run Code Online (Sandbox Code Playgroud)

输入你的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> 
Run Code Online (Sandbox Code Playgroud)

资源如何允许远程连接 MySQL

就这样。

我希望这有帮助


Tum*_*den 5

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

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

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

解:

falseconfig.inc.php中更改以下值.

$cfg['Servers'][$i]['AllowNoPassword'] = true;
Run Code Online (Sandbox Code Playgroud)

所以它读取

$cfg['Servers'][$i]['AllowNoPassword'] = false;
Run Code Online (Sandbox Code Playgroud)

更改用户的主机Any%localhost在MySQL用户表.这可以通过phpMyAdmin控制台轻松实现.

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

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

似乎所有权限,其余的是通过这两个更改修复.