无法使用 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( '***' )
在任何一种情况下,密码都不会设置并保持当前状态,为空白。
答案 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”用户的密码后,错误就消失了。
这是我采取的步骤:
mysql -uroot -pYOUR_ROOT_PASS
use mysql;
UPDATE mysql.user SET Password=PASSWORD('YOUR_PASS_HERE') WHERE User='phpmyadmin' AND Host='localhost';
FLUSH PRIVILEGES;
DONE !!它对我有用。
答案 2 :(得分:8)
如果尝试为非现有用户授予权限,则会发生此错误。
我不清楚MySQL认为什么是非现有用户。但我怀疑MySQL认为用户存在,如果可以通过User
表中的名称(列Host
)和主机(列user
)找到它。
如果尝试向可以使用其姓名(列User
)但未通过其姓名和主持人(列User
和Host
)找到的用户授予权限,而不是提供密码,然后发生错误。
例如,以下语句触发错误:
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;);