安装环境:CentOS / 7.5 x86_64 (64bit)
MySql版本:8.0.17(本文不适用8.0以下版本)
MySql安装完成后会在 mysqld.log 文件中生成一个默认的密码
使用命令 cat /var/log/mysqld.log 查看该文件:
A temporary password is generated for root@localhost: 8fMLhvG?Qdks 其中 8fMLhvG?Qdks 就是生成的密码。
使用 mysql -u root -p 登录mysql
输入mysqld.log中生成的密码即可登录如下图。
输入use mysql 命令进入mysql库
此时报错了:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 翻译过来是 在执行此命令之前你必须使用 ALTER USER 语句重置你的密码。
现在使用语句 alter user 'root'@'localhost' identified by 'root'; 重置密码
又报错了:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 你的密码不满足当前策略的要求。
使用命令:show variables like 'validate_password%'; 查看密码策略
默认为:最小长度8,包含大小写字母、数字、和特殊字符。
再执行新的语句将密码设置为满足策略要求:alter user 'root'@'localhost' identified by 'jCodeYun@123';
再执行 flush privileges; 完成修改。
如果是用于测试或是其他原因想设置简单密码,就要执行下面的语句修改默认密码策略了。
set global validate_password.policy=0;
set global validate_password.length=4;
set global validate_password.mixed_case_count=0;
set global validate_password.number_count=0;
set global validate_password.special_char_count=0;
set global validate_password.check_user_name=0;
flush privileges;
完成密码策略修改。
再执行新的语句:alter user 'root'@'localhost' identified by 'root';
修改成功了,执行 flush privileges; 完成修改。生产环境请勿设置弱密码
在navicat中新建MySQL连接,默认端口3306,点击测试连接按钮,若出现下图中的错误可能是账号只允许在localhost登录。
在服务器使用 mysql -u root -p 登录mysql 使用 use mysql 进入mysql库执行下面的命令:
update user set host = '%' where user ='root';
flush privileges;
在点击测试连接,可能回报如下错误:
错误原因:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password
解决办法
更改加密方式:ALTER USER 'root'@'%' IDENTIFIED BY 'jCodeYun@123' PASSWORD EXPIRE NEVER;
更新用户密码:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'jCodeYun@123';
flush privileges;
现在单击测试连接按钮 连接成功!