一、为什么Navicat等客户端链接MySQL8会报错?

使用mysql,平时多数情况下我们还是喜欢用可视化的客户端登陆管理的,很多人都比较喜欢用navicat,具体为什么喜欢我就不多说什么了。一般服务器装好MySQL以后,我们习惯建一个具有远程登录权限的帐号,在MySQL 8服务器上,用老方法创建的帐号,可以用mysql命令行正常登入,但是用navicat等第三方软件登入却会提示错误。
[转]解决Navicat客户端链接MySQL8报错的问题,附一些常用命令-海拔科技

原因是MySQL8的新特性,MySQL8默认使用 caching_sha2_password 身份验证机制。旧客户端不支持这种验证,当然就无法登入了。

所以解决办法也很简单,只需要我们在服务器上用旧的认证机制(mysql_native_password)设置密码就可以了。旧模式不是MySQL8默认模式,所以需要在创建用户或者修改密码时,明确指定为mysql_native_password模式。

首先我们试验下,用默认模式创建用户,

执行 ALTER USER 'root'@'%' IDENTIFIED BY 'aaabbb'; 创建的记录是这样的

[转]解决Navicat客户端链接MySQL8报错的问题,附一些常用命令-海拔科技

这种情况下,客户端登入不会成功

如果在创建/或者修改命令中 用WITH mysql_native_password 指明密码模式,

例如ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'aaabbb';

执行后的用户记录如下,可见plugin被设置为了mysql_native_password

[转]解决Navicat客户端链接MySQL8报错的问题,附一些常用命令-海拔科技

此时再次测试,客户端就可以正常登入了。

[转]解决Navicat客户端链接MySQL8报错的问题,附一些常用命令-海拔科技

二、MySQL8一些简单的操作

2.1 完整的创建一个远程管理员帐号

2.1.1、创建一个可以远程登陆的root用户

CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';

注意@后面“%”允许远程登入,WITH mysql_native_password 修饰允许旧模式的客户端登入

2.1.2、为账户开放权限

grant all privileges on *.* to root@'%';

如有必要,刷新权限

flush privileges;

2.2 创建一个普通用户并为其分配一个数据库

2.2.1 添加一般账户

CREATE USER '用户名'@'%' IDENTIFIED WITH mysql_native_password BY '密码';

2.2.2、创建新数据库

CREATE DATABASE IF NOT EXISTS 数据库名;

或者干脆

CREATE DATABASE 数据库名;

以前常常还要指定默认utf8字符集,现在MySQL 8.0的默认字符集是utf8mb4,所以默认即可。

默认生成的数据库字符集是这样的:

[转]解决Navicat客户端链接MySQL8报错的问题,附一些常用命令-海拔科技

2.2.3、新账户授权新数据库

grant all privileges on 数据库名.* to 用户名@'%';

为方便常常用户名和数据库名设为相同以便管理。

三、其他常用的命令

平时配置数据库少,很多命令不算熟悉,所以罗列起来,用的时候复制粘贴加修改是最方便的了。。。