网上查找了很多文章,反复实践总不得要领,综合网上的文章实测此方法问题解决!希望对大家有帮助!
方法如下:
1、修改MySQL的配置文件,使得可以无密码登录MySQL
sudo vim /etc/mysql/my.cnf
或sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在[mysqld]项下添加
skip-grant-tables
2、重启MySQL
sudo service mysql restart
3、无密码登录
mysql -uroot -p
4、修改管理员密码
use mysql;
?update user set password=password('123') where user='root';
原MySQL 5.7 版本,在user表中没有password字段,一直使用下边的方式来修改root密码
use mysql;
update user set authentication_string = password(“root”) where user = “root”;
现在要用MySQL8.0.29版本,装好MySQL后用原方法修改密码,一直报错。后来去掉password()函数后,没有报错,但是输入密码时不对。
查阅后才知道在mysql 5.7.9以无password字段和password()函数;authentication_string:字段表示用户密码,而authentication_string字段下只能是mysql加密后的41位字符串密码。所以需要用一下方式来修改root密码:
ALTER user 'root'@'localhost' IDENTIFIED BY 'newpassword';
MySql 从8.0开始修改密码有了变化,在user表加了字段authentication_string,修改密码前先检查authentication_string是否为空
1、如果不为空
use mysql;
update user set authentication_string='' where user='root';--将字段置为空
执行
flush privileges;否则直接执行下面会出现修改不成功提示!“ Operation ALTER USER failed for 'root'@'localhost'”
然后再执行
ALTER user 'root'@'localhost' IDENTIFIED BY 'root';--修改密码为root
2、如果为空,直接修改
ALTER user 'root'@'localhost' IDENTIFIED BY '你的密码';--修改密码为
如果出现如下错误
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;
需要执行
flush privileges;
然后再执行
ALTER user 'root'@'localhost' IDENTIFIED BY '你的密码';--修改密码
flush privileges;
exit;
5、还原配置文件
6、可以用下面命令登录
mysql -uroot -p root