MySQL授权权限报错1133:无法找到用户表匹配行求助
解决MySQL授权时ERROR 1133 (42000)的问题
这个错误的核心原因是MySQL的用户身份是由user和host两个字段共同唯一确定的,你当前的django用户对应的host可能不是localhost,导致你用django@localhost执行授权时,MySQL在用户表里找不到匹配的行。
第一步:确认django用户的完整身份信息
先执行这条SQL,查看所有用户的user、host和权限状态:
SELECT user, host, grant_priv FROM mysql.user;
你之前只查了user和grant_priv,漏掉了关键的host字段——比如你的django用户可能是用django@'%'创建的(允许从任意主机连接),而不是django@localhost。
第二步:根据查询结果调整授权操作
分两种情况处理:
情况1:你的
django用户的host是%或其他非localhost值
直接用匹配的host信息执行授权:GRANT ALL PRIVILEGES ON django.* TO 'django'@'%' IDENTIFIED BY '';把
%替换成你查询到的实际host值即可。情况2:你确实需要给
django@localhost用户授权
先创建这个用户,再授予权限:CREATE USER 'django'@'localhost' IDENTIFIED BY ''; GRANT ALL PRIVILEGES ON django.* TO 'django'@'localhost';
第三步:刷新权限生效
最后执行刷新权限的命令,确保修改生效:
FLUSH PRIVILEGES;
补充说明
你之前执行FLUSH PRIVILEGES没用,是因为根本不存在django@localhost这个用户,刷新权限也没法凭空生成用户行。必须先确保用户身份(user+host)在mysql.user表中存在,再执行授权操作。
内容的提问来源于stack exchange,提问作者SHENQIDECAONIMA Teddy




