阅读更多
操作系统是windows,MySQL版本是 5.7,my.ini在另外的路径下。
已经用了一段时间,也设置了好几个用户,因为要最近想修改root密码,所以用网上的:
mysqladmin -uroot -pmy_old_pwd password my_new_pwd
来修改密码,重启服务后,发现没有修改成功。又试了几次,包括直接update mysql.user,都不成功,结果后来再试时,出现如下出错信息:
mysqladmin: connect to server at 'localhost' failed.
于是找到MySQL 5.7的官方文档:http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
按照如下步骤:
1. 修改 my.ini,在 [mysqld]下增加一行:
skip-grant-tables
2. 重启 mysql
3. 在mysql/bin目录下,执行mysql -uroot,连接上mysql
4. 参考上面官方首次,
5.7.6之后版本用如下命令:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
运行后出如下信息,说明没成功
Query OK, 0 rows affected (0.00 sec)
于是在用5.7.5之前版本的命令:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
运行后出如下信息,说明也没成功
Query OK, 0 rows affected (0.00 sec)
5. 再用如下命令测试:
UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass') password_expired = 'N'
WHERE User = 'root' AND Host = 'localhost';
运行后也是: Query OK, 0 rows affected
所以下面的也就不用执行了
FLUSH PRIVILEGES;
6. 接着用如下命令,放宽where条件
update mysql.user set authentication_string=PASSWORD('newpassword') where User='root';
执行后提示:Query OK, 1 row affected...说明有戏
7. 将my.ini 修改回来,重启mysql,做测试:root用户新密码可用了,旧密码不再可用。其他用户没有受到影响。