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

MySQL错误#1133-Can';在用户表中找不到任何匹配的行,mysql,phpmyadmin,mysql-error-1064,Mysql,Phpmyadmin,Mysql Error 1064,无法使用5.5.27-MySQL的3.5.2.2-phpMyAdmin为用户设置密码。当以用户身份登录phpMyAdmin时尝试设置密码时,会弹出以下错误: #1133 - Can't find any matching row in the user table 当以root用户身份登录时,将弹出以下密码设置成功消息 SET PASSWORD FOR 'user'@'%' = PASSWORD( '***' ) 在任何一种情况下,密码都不会设置并保持当前状态,为空。事实证明,错误确实非常模

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

#1133 - Can't find any matching row in the user table
当以root用户身份登录时,将弹出以下密码设置成功消息

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

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

事实证明,错误确实非常模糊

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

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

解决方案:

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

$cfg['Servers'][$i]['AllowNoPassword'] = true;
以使其读起来

$cfg['Servers'][$i]['AllowNoPassword'] = false;
在MySql用户表中将用户的主机从
任何
%
更改为
本地主机
。这可以通过phpMyAdmin控制台轻松实现

这两个更改允许我使用其密码作为用户进行身份验证,而不允许使用密码进行身份验证

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


似乎所有权限和其余权限都已通过这两个更改修复

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

FLUSH PRIVILEGES;
该命令的命令名为

从mysql数据库中的grant表重新加载权限

由于GRANT和CREATE USER语句,服务器将信息缓存在内存中。 相应的REVOKE和DROP USER语句不会释放此内存,因此 如果服务器执行了许多导致缓存的语句实例,则 内存使用的增加。可以使用刷新权限释放此缓存内存


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

如果您使用PHPMyAdmin,则必须以root用户身份登录才能更改root密码。在user put root中,将密码留空,然后更改密码。

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

一旦我更新了“phpmyadmin”用户的密码,错误就消失了

以下是我采取的步骤:

  • 以root用户身份登录mysql:
    mysql-uroot-pYOUR\u root\u PASS
  • 改为mysql数据库:
    使用mysql
  • 更新“phpmyadmin”用户的密码:
    UPDATE mysql.user SET Password=Password('u PASS_HERE'),其中user='phpmyadmin'和Host='localhost'
  • 刷新权限:
    刷新权限

  • 完成!!在我的例子中,我刚刚重命名了Mysql用户,该用户将在基于gui的数据库工具(DbVisualizer)上更改其密码。我试图“设置密码”的终端无法工作(MySQL错误#1133)

    然而,对我来说,即使在更改了密码之后,“设置密码”命令仍然不起作用


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

    在新数据库上授予all。*至newuser@localhost由“密码”标识

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

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

    如果试图将权限授予一个可以通过其姓名(列
    用户
    )而不是通过其姓名和主机(列
    用户
    主机
    )找到的用户,并且不提供密码,则会发生错误

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

    grant all privileges on mydb.* to myuser@'xxx.xxx.xxx.xxx';
    
    这是因为,在没有指定密码的情况下,MySQL无法创建新用户,因此会尝试查找现有用户。但是在
    user
    表中找不到名为
    myuser
    的用户和主机
    xxx.xxx.xxx

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

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

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

    通过刷新权限完成操作:

    flush privileges;
    

    我想答案就在这里:

    所以,你应该写:

    将mydb.*上的所有权限授予由“mypassword”标识的myuser@'xxx.xxx.xxx.xxx'

    我认为这可能是一项工作:

    设置myuser@'xxx.xxx.xxx.xxx'的密码,由'old_PASSWORD'=密码('new_PASSWORD')标识

    来阐述

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

    USE database_name;
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
    
    mysql -u username -h mysql-server-ip-address -p
    
    这给出了一个错误:

    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 -u root -p
    
    SELECT host FROM mysql.user WHERE user = "root";
    
    +-----------+
    | host      |
    +-----------+
    | localhost |
    +-----------+
    
    USE database_name;
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'my-password';
    
    SELECT host FROM mysql.user WHERE user = "root";
    
    +-----------+
    | host      |
    +-----------+
    | %         |
    | localhost |
    +-----------+
    
    mysql -u username -h mysql-server-ip-address -p
    
    mysql -u root -h 34.69.261.158 -p
    
    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>