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
3、启动mysql
执行命令 service mysqld start
4、连接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";
7、刷新权限(必须步骤)
执行命令: flush privileges;
8、将第2步中的修改内容还原
9、退出登陆,使用用户名和密码登陆
执行命令 mysql -u root -p
输入密码,回车,发现登陆成功。
可能出现的问题:
问题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的值有关。
默认是1,即MEDIUM,表示设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
解决方法一:使用符合规范要求的密码。
解决方法二:如果仍想使用简单密码,可以按顺序执行以下命令:
set global validate_password_policy=0; //修改密码验证规则
set global validate_password_length=1; //修改密码要求的最小长度,默认为8
alter user 'root'@'localhost' identified by '123456'; //修改密码