前段时间经理让我把项目部署到阿里云上,并且改下数据库密码,前面一切都很顺利,到了改密码,踩坑开始了!
怎么改都报错,网上查了很多方案都不行,下面记录一下我的修改方法,毕竟好记性不如烂笔头!
1.vim /etc/my.cnf [mysqld]后面加入skip-grant-tables
2.重启mysql service mysqld restart
3.登录到数据库mysql -u root -p,passwrod:直接回车;
4.mysql>use mysql ; (不要去掉;)
5.update user set authentication_string='' where user='root';(先置为空,不可直接设置密码,切记!)
6.退出mysql, 删除/etc/my.cnf文件下面的 skip-grant-tables,然后重启mysql服务;
7.再次登录到数据库mysql -u root -p
8.passwrod:直接回车;
9.如果是本地访问数据库:ALTER user 'root'@'localhost' IDENTIFIED BY 'Qzy000#';如果是远程访问数据库:ALTER user 'root'@'%' IDENTIFIED BY 'Qzy1234#'
至此修改成功; 从新使用用户名密码登录即可;
需要注意的点:
1.从mysql5.8开始,修改密码用authentication_string,而不是password;
2.update user set authentication_string='Qzy1234#' where user='root';如果这样修改,可以执行成功,不会报错,但是修改后的密码是明文,通过select host, user, authentication_string, plugin from user;可以查看相关用户的访问权限、加密方式等,密码没加密,mysql是拒绝访问的,因为authentication_string字段下只能是mysql加密后的41位字符串密码;所以这样修改不报错,但是还是不能登录!
3.关于密码加密,5.8.0默认用caching_sha2_password,8.0之前用的mysql_native_password,有些客户端还不支持caching_sha2_password,可以改成mysql_native_password==>同样是登录mysql后执行:ALTER USER 'root'@'localhost' IDENTIFIED with mysql_native_password BY '000000' PASSWORD EXPIRE NEVER;
4.登录mysql后执行:SHOW VARIABLES LIKE 'validate_password%';可以查看相应的密码策略,如下:
mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+ 7 rows in set (0.00 sec)
相关知识可自行搜索,如果要修改的密码不符合密码策略,可以自行修改密码策略,或者将自己的密码设置成符合密码策略的格式即可;
修改密码策略方式:
登录数据库,然后执行:set global validate_password.policy=0;(这只是修改policy,其他策略修改方式跟这个类似,不再赘述,到此结束!)