配置navicat连接mysql8

由于最新版mysql8更换了安全机制 navicat无法连接 需要修改mysql8配置

这里使用ubuntuLTS示例

一、前置条件:

下载mysql8源配置包 一定要下最新版(访问https://dev.mysql.com/get/查看)

wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb

sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb

sudo apt update

apt-get install mysql-server

二、开始修改配置允许外部访问:

1,使用grep -an “temporary password” /var/log/mysqld.log获取临时密码

2,使用mysql -u root -p xxxxxxx(查询到的临时密码)

3,登进MySQL之后,

4,输入以下语句,进入mysql库:

use mysql;

5,更新域属性,’%'表示允许外部访问:

select host, user from user;

update user set host=’%’ where user =‘root’;

6,执行以上语句之后再执行:

FLUSH PRIVILEGES;

7,再执行授权语句:

GRANT ALL PRIVILEGES ON . TO ‘root’@’%'WITH GRANT OPTION;

然后外部就可以通过账户密码访问了。

8,其它说明:

FLUSH PRIVILEGES; 命令本质上的作用是:

将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。

MySQL用户数据和权限有修改后,希望在"不重启MySQL服务"的情况下直接生效,那么就需要执行这个命令。

通常是在修改ROOT帐号的设置后,怕重启后无法再登录进来,那么直接flush之后就可以看权限设置是否生效。

而不必冒太大风险。

三、可能存在的其它问题:

执行完之后,再用Navicat连接mysql,报错如下:

Client does not support authentication protocol requested by server;
报错原因:

mysql8.0 引入了新特性 caching_sha2_password;这种密码加密方式Navicat 12以下客户端不支持;

Navicat 12以下客户端支持的是mysql_native_password 这种加密方式;

解决方案:

1,用如下语句查看MySQL当前加密方式

select host,user,plugin from user;
查询结果

mysql> select host,user,plugin from user;
±----------±-----------------±----------------------+

| host | user | plugin |

±----------±-----------------±----------------------+

| % | root | caching_sha2_password |

| localhost | mysql.infoschema | caching_sha2_password |

| localhost | mysql.session | caching_sha2_password |

| localhost | mysql.sys | caching_sha2_password |

±----------±-----------------±----------------------+

4 rows in set (0.00 sec)

看第一行,root加密方式为caching_sha2_password。

2,使用命令将他修改成mysql_native_password加密模式:改的时候不要退出 否则会出现无法再登陆

update user set plugin=‘mysql_native_password’ where user=‘root’;
ALTER USER USER() IDENTIFIED BY ‘coho@2019’;

需要先改过外部访问% 再用下面的命令 必须输入 否则无法再登陆
alter user ‘root’@’%’ identified with mysql_native_password by ‘password!zxc’;

刷新权限 必须输入 否则无法再登陆
FLUSH PRIVILEGES;
再次连接的时候,就成功了。

实在没办法只能删掉/var/lib/mysql这个目录 重启mysql会初始化

使用grep -an “temporary password” /var/log/mysqld.log从新获取临时密码登陆重新修改

四、如果还连接不上

通过以上操作后,依然无法连接上,问题可能出在了防火墙上。

1,MySQL部署在实体服务器上解决方案如下:
a.开放MySQL的端口号,默认端口号是3306。
b.直接关闭防火墙(慎重操作,不建议。当然测试玩的话就随意了。。。。)
2,MySQL部署在云计算机上的方案如下:
a.以阿里云为例,找到实例,设置安全组,开放端口号即可。

五、其他

免密登陆mysql
在/etc/mysql/my.cnf添加
[client]
#Use No Password Login
#password=""

如提示密码强度问题可先设置大小写加符号的密码,然后修改密码级别再改回来
mysql> use mysql;
mysql> SHOW VARIABLES LIKE ‘validate_password%’;
mysql> set global validate_password_policy=LOW;
set global validate_password.policy=LOW;(不同版本差异)

清除mysql的binlog
mysql -u -p ;
reset master;

8.0以上已经取消了NO_AUTO_CREATE_USER这个关键字,删掉sql语句中的这个关键字即可
最终,/etc/my.cnf 配置文件中 修改 :sql_mode=‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION’
重启生效
service mysqld restart;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值