MySQL修改root密码的一些问题以及navicat连接1251错误
闲来无事,突然想学个MySQL,没想到开头就是这么难,关于修改root密码可谓是一波三折
而这之中曲折的罪魁祸首这是MySQL的版本问题,下面我就分为两部分来说说修改root密码,以MySQL5.7.9为界线,因为mysql 5.7.9以后废弃了password字段和password()函数;authentication_string:字段表示用户密码。
mysql 5.7.9以下修改密码很方便,基本就是三种方法
1、 用SET PASSWORD命令
mysql> set password for 用户名@localhost = password('新密码');
2、用UPDATE直接编辑user表
mysql> use mysql; mysql> update user set password=password('新密码') where user='root' and host='localhost'; mysql> flush privileges;
3、在知道原密码的前提下,用mysqladmin
mysql> mysqladmin -u用户名 -p旧密码 password 新密码
mysql 5.7.9以上的版本修改就要注意很多地方了
1、root用户authentication_string字段下有内容,先将其设置为空,没有跳过
desc user;#查看是否为空
use mysql; update user set authentication_string='' where user='root'
2、直接执行
ALTER user 'root'@'%' IDENTIFIED BY '新密码'
关于密码策略的修改问题以及数据库工具连接问题(报错1251)
首先我们要查看 mysql 初始的密码策略,输入show variables like 'validate_password%';
设置密码的验证强度等级,设置 validate_password.policy 的全局参数为 LOW 即可,
mysql> set global validate_password.policy=LOW;
设置密码的长度,设置validate_password.length的全局参数即可,
mysql> set global validate_password.length=6;
关于 mysql 密码策略相关参数;
validate_password.length 固定密码的总长度;
validate_password.dictionary_file 指定密码验证的文件路径;
validate_password.mixed_case_count 整个密码中至少要包含大/小写字母的总个数;
validate_password.number_count 整个密码中至少要包含阿拉伯数字的个数;
validate_password.policy 指定密码的强度验证等级,默认为 MEDIUM;
validate_password.special_char_count 整个密码中至少要包含特殊字符的个数;
关于 validate_password.policy 的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
然后还有一点很重要就是user表中的这个host字段,root用户的host在不同版本的取值也不一样,这对后面修改密码和加密规则都有影响,
mysql> use mysql; mysql> select user,host from user;
1、完全忘记密码
mysql> use mysql;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
mysql> FLUSH PRIVILEGES;
2、记得原密码,输入命令行最后输入老密码确定
mysql> mysqladmin -u root -p password 新密码
'localhost' 指的是用户开放的IP,可以是'localhost'(仅本机访问,相当于127.0.0.1),可以是具体的'*.*.*.*'(具体某一IP),也可以是 '%' (所有IP均可访问)
例如修改加密规则的两种不同方式,解决1251错误
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'
FLUSH PRIVILEGES; #刷新权限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
FLUSH PRIVILEGES; #刷新权限
注:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,连接sqlyog时出现加密规则错误1521 ,解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password.
远程连接修改,其中“%”表示允许所有机器能访问root用户
update user set host='%' where user='root'; flush privileges;