mysql8.0出现的2059 - authentication plugin 'caching_sha2_password' -navicat连接异常问题
问题描述:
在navicat链接mysql8以后的版本时会出现2059的错误,这个错误出现的原因是在mysql8之前
的版本中加密规则为mysql_native_password
,而在mysql8以后
的加密规则为caching_sha2_password
。
解决方案:
- 将mysql8.0以后验证方式改为以前版本使用的验证方式
mysql_native_password
。
找到mysql对应的安装目录下my-default.ini
文件,
将default_authentication_plugin=caching_sha2_password
改为default_authentication_plugin=mysql_native_password
。
以下是我的my-default.ini
的内容:[mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 basedir=C:\Program Files\MySQL\MySQL Server 8.0 # 设置mysql数据库的数据的存放目录 datadir=C:\Program Files\MySQL\MySQL Server 8.0\data # 允许最大连接数 max_connections=200 # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统 max_connect_errors=10 # 服务端使用的字符集默认为UTF8 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证 default_authentication_plugin=mysql_native_password [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [client] # 设置mysql客户端连接服务端时默认使用的端口 port=3306 default-character-set=utf8
- 以
管理员身份
运行cmd(win10右键左下角开始按钮选择以管理员身份运行cmd即可) - 以管理员身份运行cmd进入mysql的安装目录下的bin文件夹
C:\>cd C:\Program Files\MySQL\MySQL Server 8.0\bin
- 如果C:\Program Files\MySQL\MySQL Server 8.0\bin 目录下没有data文件夹,执行以下命令:
- 输入
mysqld -install
(如果不用管理员身份运行,将会因为权限不够而出现错误:Install/Remove of the Service Denied!) - 运行
mysqld --initialize
即可,此时查看已有data文件夹。
- 输入
- 登录数据库
命令行执行mysql -u root -p
然后输入数据库密码,出现Welcome to the MySQL monitor. .. 字样则登录成功。 - 修改加密规则
执行ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
- 更新一下用户的密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxxxx';
其中的xxxxx 为新设置的密码。 - 刷新权限
执行FLUSH PRIVILEGES; - 然后打开Navicat连接Mysql,发现连接成功了,完美解决问题。
- 具体操作如下:
C:\>cd C:\Program Files\MySQL\MySQL Server 8.0\bin C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -u root -p Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.13 MySQL Community Server - GPL Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; Query OK, 0 rows affected (0.07 sec) mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'abcd'; Query OK, 0 rows affected (0.06 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql>
经过一系列操作最终解决了问题,Navicat顺利连接Mysql。
网友评论