MySQL错误#1133-Can';在用户表中找不到任何匹配的行
无法使用5.5.27-MySQL的3.5.2.2-phpMyAdmin为用户设置密码。当以用户身份登录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( '***' ) 在任何一种情况下,密码都不会设置并保持当前状态,为空。事实证明,错误确实非常模
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>