最近想在自己机子上搞个数据库弄点小项目玩玩,突然发现已经好久没有登过本机的MySQL服务器了,这不,root用户的密码都给整忘了…密码其实之前写在备忘录里头,可是有天手贱把备忘录给删了个一干二净,彻底找不回来了!贼尴尬!
不过不用慌,遇事不决用 Google (不是,是百度),一番尝试之后,马上就解决了这个问题,此处做个步骤记录,留个备忘。
解决步骤如下:
打开MySQL的配置文件
my.ini
文件 (windows下), linux下是/etc/my.cnf
. 找到[mysqld]
这一段配置的位置,加上shared-memory
和skip-grant-tables
这个配置,保存并退出。重启 MySQL 服务, windows 下可以使用
net start mysql
命令,待 MySQL 正常启动之后,使用命令行用 root 用户登录到 MySQL. 直接输入shell1
mysql -u root
然后直接回车,可以成功登录 MySQL 服务端。
接着,在命令行终端输入
use mysql
更改目标数据库为mysql
. 修改mysql
数据库的user
表。SQL语句如下:sql1
update user set password=password('new password') where user='root';
将其中的
'new password'
改为自己想要设置的新密码,上述改法适用于 MySQL 5.x 版本。注意:如果是 MySQL 8.0及以上版本,对应的修改 SQL 应为:
sql1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword'
注意 !!! 这是网上说的最多的解决方案! 百度搜索出来之后一堆中文文章都是告诉你应该这样去做……然并卵! 上述这种改法并不能解决问题!!!
最后百般尝试失败之后,我尝试了用英文关键字在Google上搜了一把!结果终于让我在爆栈上找到一个靠谱的解决办法!
直接说就是
sql1
2
3
4
5
6
7
8
9
10
11# 1. 如果在 skip-grant-tables 模式下,执行下列步骤
UPDATE mysql.user SET authentication_string='' WHERE User='root';
FLUSH PRIVILEGES;
exit;
# 然后开一个新的终端,重新登录
mysql -u root
# 下面这句才是改动成功的至关重要的一步!!!
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd'
# 2. 如果不在 skip-grant-tables 模式下, 那么直接执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd'刷新权限
flush privileges
,完成之后退出终端重新启动 MySQL 服务,新开一个命令行终端使用新设置的密码登录,如果成功登录,就证明本次修改 root 用户密码成功了。
最后是吐个槽:
刚开始按照网上的说法试了好多遍一直报各种奇奇怪怪的错!也难怪,现在网上的文章特别是CSDN这一类的都是一大抄,有时候就是很难找到靠谱的东西,所以关键还是要学会科学上网啊,只有这样才能省时省力!
参考链接: