ik分词器连接mysql热 连接不上mysql问题

在配置好ik后,打包放到plugin目录下,运行es,日志如下在这里插入图片描述在这里插入图片描述在这里插入图片描述

很明显错误链接不上mysql,我那个在idea上把loadMySQLExtDict运行了一下,结果居然能访问到mysql,现在这个情况应该就是,在idea上能跑,但把他放到es的plugin/ik下,它跑不了,明明参数都获取到了,端口防火墙也开了,为啥es访问不到mysql呢?
不同版本的mysql驱动报的错误不一样,8.x启动不了,上图依次是5.1.29和5.1.39和6.0.6的错误。
我的es是7.6.2,ik是7.6.2,那么mysql驱动该用哪个版本呢?

解决办法

第三天!!这个错误解决了,
Java 安全权限导致的异常。具体来说,我认为是,配置热部署mysql后,实时更新,这时ik要不断地连接mysql,需要socket权限,但是呢,jdk没有开启,这时,你就需要改es连接的jdk的配置了,es默认使用的是本地的,如果本地没有,则使用默认的。
E:\Program Files\Java\jdk1.8.0_161\jre\lib\security ,找到 java.policy ,在 grant最后一行加入 permission java.security.AllPermission; ,然后重启ES ,即可解决。
在这里插入图片描述
其实吧,遇见这个错误的都是没有看配置的人,
在这里插入图片描述

仅仅修改源码,不改jdk权限

在dictionry类中加 ,AccessController.doPrivileged,大概意思就是,loadMYSQLStopwordDictrun要去打开一个文件,但是他没有权限,现在用doPrivileged读取,跳过没权限,请看 https://www.iteye.com/blog/huangyunbin-1942509
private void loadMySQLStopwordDict() {
logger.info("--------mysql stop_word add---------------");
SpecialPermission.check();
AccessController.doPrivileged((PrivilegedAction) () -> {
this.loadMySQLStopwordDictrun();
return null;
});
}

具体来说:
1,在插件根目录下 新建 plugin-security.policy 文件,其中加上必须的权限。
elasticsearch会在启动时读取该文件,将文件中的权限加到该plugin目录下的所有的 *.jar 上。
2,在使用权限的地方使用赋权代码:
// ES permission you should check before doPrivileged() blocks
import org.elasticsearch.SpecialPermission;
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
// unprivileged code such as scripts do not have SpecialPermission
sm.checkPermission(new SpecialPermission());
}
AccessController.doPrivileged(
// sensitive operation
// 你要的额外权限的地方的代码
);
这样doPrivileged 里面的代码就会获取plugin-security.policy中的权限,不会报错了。除非plugin-security.policy文件中权限没有配全。
以上就是elasticsearch插件的获取权限的流程。
警告:其中第二步是不可避免的,虽然很麻烦。
参考:https://blog.csdn.net/goodluck_mh/article/details/92845023

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值