mysql 报错ERROR 1290 (HY000):

本文介绍了解决MySQL服务器运行时因使用--skip-grant-tables选项导致无法执行授权语句的问题,并提供了一种简单的方法来刷新权限并设置密码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statemen

mysql 配置文件目录:/etc/my.cnf

root 密码为空的时候配置文件中下面这句:

skip-grant-tables

GRANT ALL PRIVILEGES ON *.* TO IDENTIFIED BY '123' WITH GRANT OPTION;

执行这句时候错误:

ERROR 1290 (HY000): The MySQL server is  running with the --skip-grant-tables option so it cannot execute this  statement
mysql> GRANT ALL PRIVILEGES ON *.* TO IDENTIFIED BY '123'  WITH GRANT OPTION;
ERROR 1290 (HY000): The MySQL server is  running with the --skip-grant-tables option so it cannot execute this  statement

这个时候我们只需要

flush privileges

一下,在添加用户就OK了,

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO IDENTIFIED BY '123' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

这个时候我们成功搞定了,再登录就可以了。

如果报错如下信息:

Error: Cannot retrieve repository metadata (repomd.xml) for repository: InstallMedia. Please verify its path and try again
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

我们只要到/etc/yum.repo.s下面把packetxxxx.repo和redhat.repo两个文件删除掉,再启动就可以了,

<think>好的,我现在需要解决用户在Linux环境下使用MySQL时遇到的ERROR 1396问题,具体是在创建用户或授权时出现的。根据用户提供的引用内容,这个问题可能涉及用户已存在、主机名不匹配、权限不足或者需要刷新权限等情况。首先,我需要综合这些引用中的信息,整理出可能的解决方案。 首先,引用[1]提到ALTER USER失败的情况,解决方案包括检查用户是否存在、主机名是否正确,以及可能需要先删除用户再重新创建。引用[2]、[3]、[4]都涉及CREATE USER失败的问题,可能的原因包括用户已存在、主机名格式问题,或者是权限不够需要FLUSH PRIVILEGES。 接下来,我需要将这些信息整合成步骤化的解决方案。用户可能需要确认用户是否存在,比如使用SELECT查询mysql.user表。如果存在,可能需要删除用户再重新创建。同时,主机名的写法是否正确,比如是否使用了通配符%,或者是否需要指定具体的主机地址。此外,执行创建或修改操作后,是否需要刷新权限,使用FLUSH PRIVILEGES命令。另外,权限不足的问题可能需要使用root账户或者有足够权限的用户来操作。 还需要注意用户可能误用了已经存在的用户名和主机组合,比如root@localhost和root@%是不同的用户,需要分别处理。此外,如果用户之前创建过同名但不同主机的账户,可能需要检查所有可能的记录。在删除用户时,确保使用DROP USER语句正确,并且操作后刷新权限。 最后,可能需要考虑MySQL的版本差异,某些版本可能对用户管理的语法或行为有所不同,建议用户检查版本并参考对应文档。如果所有步骤都无效,可能需要检查MySQL的日志文件以获取更详细的错误信息,或者考虑重启MySQL服务作为最后手段。 总结可能的解决步骤:检查用户是否存在,正确的主机名,删除并重新创建用户,刷新权限,使用足够权限的账户操作,处理特殊字符,检查版本或日志。然后,按照逻辑顺序排列这些步骤,确保用户能一步步排查问题。</think>### Linux MySQL ERROR 1396 (HY000) 解决方案 在Linux环境下,MySQL执行`CREATE USER`或`ALTER USER`时出现`ERROR 1396`通常与用户权限、用户已存在或语法问题有关。以下是分步解决方案: --- #### **1. 确认用户是否存在** MySQL中用户由`用户名@主机名`唯一标识,需检查是否已存在同名且同主机的用户: ```sql SELECT User, Host FROM mysql.user WHERE User = '用户名'; ``` - 若存在,需先删除用户(见步骤2)再重建[^3][^4]。 - 若用户不存在,但报错仍然出现,可能是缓存问题,尝试`FLUSH PRIVILEGES;`[^2]。 --- #### **2. 删除已有用户(若存在)** ```sql DROP USER '用户名'@'主机名'; -- 例如:DROP USER 'root'@'%'; FLUSH PRIVILEGES; -- 刷新权限 ``` - **注意**:删除后需立即重建用户,否则可能影响依赖此用户的服务[^1]。 --- #### **3. 检查主机名格式** MySQL对主机名格式敏感,常见写法: - `localhost`:仅限本地连接 - `%`:允许所有远程连接 - 特定IP或域名:如`192.168.1.100` 若创建用户时未指定主机名,默认使用`%`,可能与已有用户冲突。 ```sql CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; -- 明确指定主机名 ``` --- #### **4. 使用正确权限的账户操作** - 确保当前登录的MySQL用户有`CREATE USER`或`ALTER USER`权限。 - 建议使用`root`账户或具有`GRANT OPTION`权限的用户执行操作。 --- #### **5. 特殊字符转义** 若密码含特殊字符(如`@`、`!`),需用单引号包裹: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyPass@123'; ``` --- #### **6. 重启MySQL服务** 若上述步骤无效,重启服务以清除缓存: ```bash sudo systemctl restart mysql # 或 mysqld ``` --- #### **7. 检查MySQL版本兼容性** 某些MySQL版本(如8.0+)对用户管理语法更严格,需使用`ALTER USER`代替`SET PASSWORD`。 --- ### 总结流程图 ``` 检查用户是否存在 → 存在则删除 → 指定正确主机名 → 用高权限账户操作 → 刷新权限 → 重启服务(可选) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值