我的一台mysql8.0.44 数据,忘记了root密码,我想通过使用使用授权表方式启动mysql,然后无密码进去修改数据库密码:
./mysqld_safe --defaults-file=/data/mysql8/etc/my.cnf --skip-grant-tables
其中 --defaults-file=/data/mysql8/etc/my.cnf 为配置文件路径,这里为非标准路径
本地登录Mysql后执行下面语句报错
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123456’;
ERROR 1290 HY000: The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
报错分析
The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
意思貌似MYSQL还运行在 --skip-grant-tables模式,–skip-grant-tables模式可以重置root的密码,但是用–skip-grant-tables启动后修改密码又报错,如何让他回到原来的模式
解决方法
执行命令关闭数据库只读属性
mysql> set global read_only=0;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.05 sec)
mysql> show variables like '%read_only%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_read_only | OFF |
| read_only | OFF |
| tx_read_only | OFF |
+------------------+-------+
3 rows in set (0.00 sec)
再次修改密码
这次就不报错了
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.04 sec)
密码修改成功,退出skip-grant-tables模式
kill 掉 mysqld_safe --skip-grant-tables 的进程就可以了
leenhem@DESKTOP-7SREO20:~$ sudo /etc/init.d/mysql start
* Starting MySQL database server mysqld
No directory, logging in with HOME=/[ OK ]
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!