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

出现原因:

当初在centos上面安装mysql的时候,设置了免密码登录,详情参考这篇文章【MySQL】在CentOS7环境下----手把手教你安装MySQL详细教程(附带图例详解!!)。当时是为了图省事,设置完了之后确实给我带来了便利,但是由于学校数据库实验要求,不得已需要退出这个模式,故出此教程。

解决方案:

1.在命令行中通过日志文件查看初始密码

sudo cat /var/log/mysqld.log | grep password

2.输入以下指令重新进入当时设置免密码登录的地方,把skip-grant-tables语句删掉,然后退出。

vim /etc/my.cnf

3.重新进入mysql并尝试创建用户

mysql -u root -p
Enter password:(这里输入刚刚看到的初始密码)

(成功进入mysql)

create user 'user1'@'localhost' identified by '新密码';

这个时候会发现,还是出现ERROR1290,不要着急,下面我们可以参考这篇文章的方法重置密码

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

下面按照文章中写的,先执行命令关闭数据库只读属性

mysql> set global read_only=0;
Query OK, 0 rows affected (0.00 sec)

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

mysql> show variables like '%read_only%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_read_only      | OFF   |
| read_only             | OFF   |
| super_read_only       | OFF   |
| transaction_read_only | OFF   |
| tx_read_only          | OFF   |
+-----------------------+-------+
5 rows in set (0.02 sec)

然后再将难以记忆的初始密码设置成任意你喜欢的密码,并且可以进行创建数据库用户操作了

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '你喜欢的密码';
Query OK, 0 rows affected (0.00 sec)

mysql> create user 'user1'@'localhost' identified by '1234';
Query OK, 0 rows affected (0.00 sec)

感谢上述两篇文章的作者,希望能帮到大家。

<think>好的,我现在需要解决用户提到的在MySQL启用--skip-grant-tables选项时无法更改root密码的问题,特别是ERROR 1290的情况。首先,我得回忆一下这个错误的原因和可能的解决方法。 根据用户提供的引用内容,他们在尝试修改密码时遇到了问题。比如引用[1]中提到需要先重置密码才能执行其他语句,这可能是因为MySQL的安全策略导致。而引用[2]和[3]提到了使用--skip-grant-tables选项启动服务来绕过权限验证,但可能用户在这样做之后还是遇到了问题。 首先,我应该确认ERROR 1290的具体原因。根据MySQL文档,ERROR 1290 (HY000)通常表示在服务器以--skip-grant-tables运行时,某些需要权限验证的操作无法执行。因为--skip-grant-tables会禁用权限系统,这时候执行ALTER USER可能会失败,因为系统无法验证用户权限,即使正在尝试修改自己的密码。 接下来,用户的步骤是否正确?比如在引用[2]中,用户尝试关闭服务后用--skip-grant-tables启动,但可能在启动后没有正确刷新权限或执行后续步骤。正确的流程应该是在跳过权限表启动后,先更新mysql.user表中的密码字段,然后重新加载权限,再正常重启服务。 另外,用户可能使用的是MySQL 8.0及以上版本,这些版本对身份验证插件有变化,默认使用caching_sha2_password,而不是旧的mysql_native_password。如果在修改密码时没有指定正确的插件,可能会导致问题。例如,引用[1]中的用户成功使用了mysql_native_password插件,这可能是一个关键点。 可能的解决步骤应该是: 1. 使用--skip-grant-tables启动MySQL,同时可能需要--shared-memory(如引用[2]所示)。 2. 连接到服务器,此时不需要密码。 3. 手动更新mysql.user表,将root用户的authentication_string字段设置为新密码的哈希值,并设置plugin为mysql_native_password。 4. 执行FLUSH PRIVILEGES; 使更改生效。 5. 退出并重启MySQL服务,不再使用--skip-grant-tables选项。 6. 使用新密码登录,并可能需要再次运行ALTER USER来确保密码策略符合要求。 需要验证这些步骤是否适用于用户的MySQL版本,特别是8.0版本可能存在不同的处理方式。此外,用户可能在步骤中遗漏了FLUSH PRIVILEGES或者没有正确设置身份验证插件,导致修改无效。 另外,在用户提供的引用[3]中,使用了mysqld_safe命令,可能在Unix-like系统下,而引用[2]是在Windows下。不同系统下的服务启动方式可能不同,需要确认用户的操作系统环境,但用户的问题中没有明确说明,可能需要给出不同系统的解决方案。 最后,确保用户理解在修改密码后必须重新加载权限表,并且正确重启服务,否则更改不会生效。同时,提醒用户注意密码策略的要求,如长度、复杂性等,避免因策略问题导致修改失败。</think>### 分步解决方案 当MySQL启用`--skip-grant-tables`时,系统会跳过权限验证,但可能导致`ALTER USER`命令无法直接使用。以下是解决步骤: #### 步骤1:以跳过权限模式启动MySQL 关闭MySQL服务后,通过以下命令启动(需根据系统选择方式): - **Windows**: ```bash mysqld --shared-memory --skip-grant-tables ``` - **Linux/macOS**: ```bash mysqld_safe --skip-grant-tables --skip-networking & ``` 此模式允许无密码登录[^2][^3]。 #### 步骤2:手动更新密码字段 1. 登录MySQL(无需密码): ```bash mysql -u root ``` 2. **直接修改`mysql.user`表**(适用于MySQL 5.7+和8.0): ```sql UPDATE mysql.user SET authentication_string = '', plugin = 'mysql_native_password' WHERE User = 'root'; FLUSH PRIVILEGES; ``` - 清空`authentication_string`并指定旧版密码插件[^1][^3]。 #### 步骤3:重启MySQL并重置密码 1. 退出MySQL并正常重启服务。 2. 重新登录并设置新密码: ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; ``` #### 原理说明 - `--skip-grant-tables`模式下,权限系统被禁用,直接执行`ALTER USER`会因权限检查失败而报错`ERROR 1290`。 - 通过手动更新系统表`mysql.user`绕过权限验证,再通过`FLUSH PRIVILEGES`加载新配置。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值