windows10 mysql8.0.22忘记密码解决大法,密码搞不定,不管什么原因,不管什么提示,就按下面的方法搞一下,省时高效.
如有解决不了的密码问题,欢迎留言讨论,共同进步.
mysql忘记密码:
准备工作:停止mysql服务,win+r,运行services.msc,找到mysql服务并中止它.删除服务mysqld -remove mysql; 删除mysqld进程taskkill /f /im mysqld.exe
//注意,密码连接不成功,不一定就是密码问题,要先检查服务有没有启动.否则走弯路.https://blog.csdn.net/xiaoshaohui1234/article/details/72947707
简要步骤:方案一:
1.服务端:mysqld --console --skip-grant-tables --shared-memory,
2.客户端:mysql -u root -p
密码置空:update mysql.user set authentication_string='' where user="root";
刷新:flush privileges; 密码置空之后,必须,刷新一下就可以设置密码了.
3.服务端重启:ctrl+c,两次,中止之前mysqld.然后运行mysqld --console
4.客户端:mysql -u root -p
设置密码:set password for 'root'@'localhost'='123'; 或SET PASSWORD = 'auth_string';为当前用户设置密码.
OK
方案二:(此法较稳妥)
1.服务端:mysqld --console --skip-grant-tables --shared-memory,
2.客户端:mysql -u root -p
密码置空:update mysql.user set authentication_string='' where user="root";
刷新:flush privileges;
3.客户端:设置密码:ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';
加密规则和密码同时改.ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin'; OK
注意:密码置空之后得flush privileges刷新一下,才能修改密码.不然会提示ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
回顾:改密码的4条命令:1.置空 update mysql.user set authentication_string='' where user='root'; 2.alter user 'root'@'localhost' identified by 'admin'; (这一句中也可带上with 加密插件名称) 3.set password for 'root'@'localhost'='admin';4.flush privileges;
ok
方案三:
用前面二个方法不成功,出现ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
(这种情况主要密码安全格式要求严格所致,一般在.exe安装方式安装mysql后或执行mysql_secure_installation之后,修改密码时出现 。
关于MySQL安全配置mysql_secure_installation参看https://blog.csdn.net/qq_29627051/article/details/105390362
按前面的方法修改密码,至密码置空之后,用alter user user() identified by 'admin';不成功,出现错误提示:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
根据提示信息,查看一下密码变量情况 :
1.SHOW VARIABLES LIKE 'validate_password%';
2.1重新更改密码级别:
set global validate_password.policy=0;或set global validate_password.policy=low;
注意变量名称不要打错,mysql5.7之前的变量名为validate_password_policy,后面是下划线,8.0.22的是点号.
2.2修改密码长度:set global validate_password.length=4;
3.flush privileges;
4. set password for 'root'@'localhost'='1234';或者ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';都可以.
ok
(通过set global validate_password.policy=0;和set global validate_password.length=4;两个命令所修改的变量值0、4,在重启mysql服务之后,还会恢复原值MEDIUM和8。
但修改过的密码是可以用的).
关于validate_password_policy可以参考这个https://blog.csdn.net/wltsysterm/article/details/79649484
安装插件:此法不行
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
卸插件
uninstall plugin validate_password ;
*****************************
安装插件可以用:
mysql> INSTALL COMPONENT 'file://component_validate_password'; Query OK, 0 rows affected (0.01 sec)
mysql> show global variables like '%validate_password%';
卸载插件:
mysql> unINSTALL COMPONENT 'file://component_validate_password'; Query OK, 0 rows affected (0.00 sec)
********************************
如果卸载了插件的话,之前的密码登录会一直等.(也可能是服务端有问题).
mysql忘记密码,解决办法详细版,如下:
以管理员方式
打开shell窗口
一.首先开一窗口A运行服务端
mysqld -remove mysql (删除mysql服务) //默认服务名为mysql,根据你的名称修改.本地电脑的话,可以用services.msc,启动服务器,然后按一下m键,快速找到mysql开头的服务,停止它.
taskkill /f /im mysqld.exe 删除mysqld进程
mysqld --console --skip-grant-tables --shared-memory 跳过权限表启动服务(这样不必去修改my.ini)
二.另开一窗口B
1.登录
D:\mysql\bin>mysql -u root -p
查看
use mysql;
select host,user,plugin from user; 这两句等价于select host,user,plugin from mysql.user;
mysql> select host,user,plugin from mysql.user;mysql> UPDATE mysql.user SET authentication_string='' WHERE user='root' and host='localhost'; //置空,两个单引号,之间无空格,看起来象一个双引号.
3.刷新
mysql> flush privileges;
查看密码置空效果:
mysql> select host,user,user password,plugin,authentication_string from mysql.user;
注:8.0.22保存密码的字段为authentication_strin
这里的password看着是一个字段,但select password不会显示,会报错,其对就的是user password.在这里似乎不能用update的方式来增加密码,试了,电脑好长时间无回馈.
此时空密码状态下,改变密码可用ALTER user 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'admin';
注意: 特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了 而是将加密后的用户密码存储于authentication_string字段。
4.修改密码
加密规则和密码同时改.ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin'; OK
(ALTER user 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'admin';这个加密对应插件是用caching_sha2_password)
此时再查看
mysql> select host,user,user password,plugin,authentication_string from mysql.user;
密码admin是经过加密之后内容,看不懂才正常.不是明语文显示.
另.alter user user() identified by "admin";也可以修改密码.但建议用ALTER user 'root'@'localhost' IDENTIFIED BY 'admin'; 或者ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';
如果修改当前登录身份的密码直接用alter user user() identified by "123";有时也可以.
有时ALTER user user() IDENTIFIED BY 'admin';
会提示出错
:
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'skip-grants host'
刷新也无用.
而用ALTER user 'root'@'localhost' IDENTIFIED BY 'admin';或者ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';(建议用这条语句)可以.
所以,稳妥点还是多打几个字用有@的比用user()效果好.
特殊例外(方案三):用上述方法修改密码出现ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
这种情况主要密码安全格式要求严格所致,一般在.exe安装方式安装mysql后或执行mysql_secure_installation之后,再改密码时出现 .
(关于MySQL安全配置mysql_secure_installation参看https://www.jb51.net/article/47727.htm)
按前面的方法修改密码,至密码置空之后,用alter user user() identified by 'admin';不成功,出现错误提示:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
根据提示信息,查看一下密码变量情况 :SHOW VARIABLES LIKE 'validate_password%';
关于密码要求参考:
密码级别变量validate_password.policy为medium,
重新更改密码级别:
set global validate_password.policy=0;或set global validate_password.policy=low;
注意变量名称不要打错,mysql5.7之前的变量名为validate_password_policy,后面是下划线,8.0.22的是点号.
再次修改密码:
还是出错,再看密码变量值:show variables like 'validate_password%';
密码长度不合格,再修改下长度:set global validate_password.length=4;
再次修改密码:(须flush privileges;刷新之后再修改密码才行.)
(通过set global validate_password.policy=0;和set global validate_password.length=4;两个命令所修改的变量值0、4,在重启mysql服务之后,还会恢复原值MEDIUM和8.
但修改过的密码是可以用的).
注:可以在客户端窗口用cmd命令行方式:mysqladmin -u root shutdown -p 停止 服务窗口对应的mysqld服务。