mysql忘记连接密码解决方法

1、关闭正在运行的MySQL服务。
2、修改mysql配置文件
(1)windows系统为my.ini文件,通常在mysql安装目录下,例如: C:\ProgramData\MySQL\MySQL Server 5.7\my.ini,如果没有my.ini文件,则新建该文件。
注意:如果是windows系统,也可以不修改mysql配置文件,只需在启动mysql时加入启动参数即可

mysqld --skip-grant-tables

(2)Linux系统为my.cnf文件,通常在/etc目录下,例如:/etc/my.cnf
编辑配置文件,在[mysqld]节点下结尾添加以下内容,保存退出。

skip-grant-tables

mysql忘记连接密码解决方法
3、启动mysql

执行命令 service mysqld start

4、连接mysql

执行命令 mysql ,发现可以直接连上mysql了
mysql忘记连接密码解决方法
5、切换数据库

执行命令 use mysql

6、修改mysql连接密码
(1)mysql5.6及之前的版本执行以下命令:

update user set password=password('123') where user='root' and host='localhost'; 

(2)mysql5.7及之后的版本用户表结构有变化,需执行以下命令:

update user set authentication_string = password("123") where user = "root";

mysql忘记连接密码解决方法
7、刷新权限(必须步骤)
执行命令: flush privileges;

8、将第2步中的修改内容还原

9、退出登陆,使用用户名和密码登陆

执行命令 mysql -u root -p
输入密码,回车,发现登陆成功。
mysql忘记连接密码解决方法

可能出现的问题:
问题1、执行第6步,提示Table ‘mysql.servers’ doesn’t exist
解决方法一:查看mysql配置文件中,datadir的路径是否配置正确,默认路径为/var/lib/mysql,我改了这个路径,默认路径下是有servers表的,将datadir配置改为默认路径后,就没这个问题了。

解决方法二:由于升级完数据库造成丢失原有的系统表,这时可以通过下面的命令创servers表:

CREATE TABLE `servers` (
            `Server_name` char(64) NOT NULL,
            `Host` char(64) NOT NULL,`Db` char(64) NOT NULL,
            `Username` char(64) NOT NULL,
            `Password` char(64) NOT NULL,
            `Port` int(4) DEFAULT NULL,
            `Socket` char(64) DEFAULT NULL,
            `Wrapper` char(64) NOT NULL,
            `Owner` char(64) NOT NULL,
            PRIMARY KEY (`Server_name`)
            ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';

问题2、改完密码,退出登陆,再次登陆,执行第5步时,提示以下错误信息

mysql> use mysql
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

原因分析:出现这个错误一般是因为密码为空或密码强度不符合要求。这个与validate_password_policy的值有关。
mysql忘记连接密码解决方法
默认是1,即MEDIUM,表示设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
解决方法一:使用符合规范要求的密码。
解决方法二:如果仍想使用简单密码,可以按顺序执行以下命令:

set global validate_password_policy=0;       //修改密码验证规则
set global validate_password_length=1;        //修改密码要求的最小长度,默认为8
alter user 'root'@'localhost' identified by '123456';     //修改密码