基础材料:
MySQL5.7 CentOS7.4
操作步骤:
[root@localhost]# systemctl stop mysqld
[root@localhost]# sed -i '/\ [mysqld\ ]/a\skip-grant-tables' /etc/my.cnf
编辑my.cnf文件,在[mysqld]段落内添加skip-grant-tables,表示登录时跳过密码验证,
这里特别注意一下mysqld前后的\ [和\ ]中间各有一个空格(因为连起来写好像是CSDN这个编辑器的特殊符号会转义成其他东西),如果执行该命令时,请将空格去掉,或者手动修改配置,否则....
[root@localhost]# systemctl start mysqld
[root@localhost]# mysql -u root -p
直接回车登录数据库
mysql> use mysql;
mysql> update user set authentication_string=password('new password') where user='root';
修改密码,将new password指定为需要修改的密码
mysql> flush privileges;
刷新权限设置
mysql>quit;
[root@localhost]# sed -i 's/skip-grant-tables/# skip-grant-tables/g' /etc/my.cnf
注释掉skip-grant-tables项,以新密码登录数据库
[root@localhost]# systemctl restart mysqld
[root@localhost]# mysql -u root -p
输入新密码
###############################################################
以上在5.7.21测过通过,在5.7.17及以下版本,使用新密码登录后,执行命令时会报
ERROR 1820 (HY000): You must reset your password using ALTER USER statement;
则需要追加一步操作,重新设定root密码
mysql> SET PASSWORD = PASSWORD('new password');
###############################################################
正常登录时修改密码,通过如下命令修改:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';