mysql8.0远程连接权限设置和项目连接mysql时报caching_sha2_password错误

版权声明:feixie https://blog.csdn.net/qq_36850813/article/details/83718102

1.登录MySQL

mysql -u root -p

输入您的密码

2.选择 mysql 数据库

use mysql;

因为 mysql 数据库中存储了用户信息的 user 表。

3.在 mysql 数据库的 user 表中查看当前 root 用户的相关信息

select host, user, authentication_string, plugin from user; 

执行完上面的命令后会显示一个表格

查看表格中 root 用户的 host,默认应该显示的 localhost,只支持本地访问,不允许远程访问。

我们看host和user两列,host和user中root对应的值为localhost,即root用户的访问权限为localhost,想把该用户的访问权限设置可远程连接,我们只需要把localhost更改为通配的%就可以了。上面的权限操作语句没有走通,这里就直接使用update语句来更改吧。

update user set host = "%" where user = "root";

修改之后就将root用户的访问权限设置成了可远程访问了。

FLUSH PRIVILEGES;

systemctl start firewalld # 开启防火墙
systemctl stop firewalld  # 关闭防火墙
systemctl status firewalld  #检查防火墙状态

一般需要关闭防火墙才能连接。关闭远端服务器防火墙后,可以连接了

如果你觉得关闭防火墙不安全,可打开远端服务器的iptables(安装或升级命令“yum install iptables”)(我用root用户登录的),并用“vi /etc/sysconfig/iptables”检查3306端口是否打开,如没有,在文件中加入“-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT”(如下所示),保存文件并用“service iptables restart”命令重启iptables

项目连接mysql时报caching_sha2_password错误

重点看caching_sha2_password这个,由于我安装的mysql是8.0的版本,

mysql8.0和5.x其中一个改动就是加密认证方式发生改变,

caching_sha2_password是8.0
mysql_native_password是5.x

解决方案有两个:

1,更改mysql的加密认证方式,更改方法请参考:https://blog.csdn.net/h996666/article/details/80921913

2,更改mysql的jdbc版本,直接在xx.pom修改版本号即可。

mysql jdbc的maven链接:http://mvnrepository.com/artifact/mysql/mysql-connector-java

8.0.x之后的应该都是可以的

我选择了第2个方案,第一个方案没试过。
 

我继续跑项目又遇到:

Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

原因:

同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞;

解决方法:

解决方法:
   1、提高允许的max_connection_errors数量:
  ① 进入Mysql数据库查看max_connection_errors: show variables like '%max_connect_errors%'; 
    ② 修改max_connection_errors的数量为1000: set global max_connect_errors = 1000; 
  ③ 查看是否修改成功:show variables like '%max_connect_errors%'; 

   2、使用mysqladmin flush-hosts 命令清理一下hosts文件(不知道mysqladmin在哪个目录下可以使用命令查找:whereis mysqladmin);
  ① 在查找到的目录下使用命令修改:mysqladmin --socket=/tmp/kkimdb.sock --port=3306 -uhyman -p flush-hosts
  备注: 配置有master/slave主从数据库的要把主库和从库都修改一遍的(我就吃了这个亏明明很容易的几条命令结果折腾了大半天); 
      mysql> flush hosts; 也可以
      max_connect_errors是一个MySQL中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的情况。max_connect_errors的值与性能并无太大关系。
      默认情况下,my.cnf文件中可能没有此行,如果需要设置此数值,手动添加即可。
[root@www ~]# vi /etc/my.cnf
max_connect_errors = 1000
      配置说明
      当此值设置为10时,意味着如果某一客户端尝试连接此MySQL服务器,但是失败(如密码错误等等)10次,则MySQL会无条件强制阻止此客户端连接。
如果希望重置此计数器的值,则必须重启MySQL服务器或者执行 mysql> flush hosts; 命令。 
      当这一客户端成功连接一次MySQL服务器后,针对此客户端的max_connect_errors会清零。
影响与错误形式
     如果max_connect_errors的设置过小,则网页可能提示无法连接数据库服务器;
而通过SSH的mysql命令连接数据库,则会返回 ERROR 1129 (00000): Host 'gateway' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 错误。 
     功能与作用
     一般来说建议数据库服务器不监听来自网络的连接,仅仅通过sock连接,这样可以防止绝大多数针对mysql的攻击;如果必须要开启mysql的网络连接,则最好设置此值,以防止穷举密码的攻击手段。

猜你喜欢

转载自blog.csdn.net/qq_36850813/article/details/83718102
今日推荐