mysql怎么和es联动 es与mysql( 二 )


join 其实有父子文档的概念,父文档通过一个字段关联一个子文档 , 
这个结构比较复杂的是在你推数据时,需要指定对应的父文档是哪个
mapping结构如下
解释一下
优点就是更新数据时,不用连带着父子文档一起改,缺点是查询效率不如nested结构
以后再说吧??
使用canal将mysql同步到es中 因为自己项目中需要用到mysql数据同步到es中,查找了相关资料最后决定用canal来做,所以便有了本文,下面一起来看如何使用canal吧
根据上的原理解释 , 我们知道 canal 会模拟 mysql slave 的交互协议,伪装自己为 mysql slave,然后向 mysql master 发送 dump 协议 。
mysql master 收到 dump 请求,开始推送 binary log 给 slave(也就是 canal) , 然后 canal 解析 binary log 对象(原始为 byte流) 。
经 canal 解析过的对象,我们使用起来就非常的方便了 。
再根据提供的版本信息 , 你会发现 canal 其实相当于一个中间件 , 专门用来解析 MySQL 的 binlog 日志 。canal 解析好了之后 , 会封装成一个数据对象,通过 protobuf3.0 协议进行交互,让 canal 客户端进行消费 。
根据上面的解释 , 以及 canal 提供的版本信息,我们在使用 canal 的时候 , 首选要安装一个 canal.deployer-1.1.4.tar.gz 进行解析 MySQL 的 binlog 日志 。
下载后 , 复制 canal.deployer-1.1.4.tar.gz 到 MySQL 主机上,比如放在 /usr/local/soft/目录下 。然后依次执行下面的命令:
然后修改 canal 的配置文件 vim conf/example/instance.properties
这三项改成你自己的,比如我的配置如下:
然后保存并退出 。(VI 模式下 , 按 Esc 输入 :wq 回车退出 。)
接着,我们检查一下 MySQL 的配置 。确定版本和是否开启了 binlog 日志,以及日志格式 。
canal 支持 binlog 格式为 ROW 的模式 。如果你没开启 binlog,并且格式是非 row 的,建议修改一下 mysql 的配置文件 。
执行 mysql –help | grep my.cnf 找到 mysql 的 my.cnf 文件 。
执行 vim /etc/my.cnf 命令 。添加下面 3 个配置 。
然后保存并退出 。
接着执行 sudo service mysqld restart 重启 MySQL 。
需要注意的是你的 mysql 用户,必须要有 REPLICATION SLAVE 权限 。该权限授予 slave 服务器以该账户连接 master 后可以执行 replicate 操作的权利 。
【mysql怎么和es联动 es与mysql】 如果没有权限,则使用 root 账户登录进 MySQL,执行下面的语句,创建用户 , 分配权限 。
MySQL 启动后,就可以开启 canal 服务了 。
开启后,观察 canal 服务的日志,确保服务正常 。
查看 canal 的日志
确定没有问题后 , 开始编写我们的测试程序 。
pom.xml 中导入下面的依赖 。
使用JAVA进行测试
然后执行 main 方法 。你再修改修改 MySQL 中的数据,你会发现所有改变都同步过来了 。上面是使用的Java代码进行运行,如果想用canal.adapter来进行运行可以下载
放入服务器中 , 依次执行下面命令
然后修改配置文件 :
然后将需要运行存储到es的的yml文件放入到
目录下 。例如:
然后开启canal-adapter服务
/usr/local/soft/canal-adapter/bin/startup.sh
查看 canal-adapter 的日志,确定没有问题后修改数据 就可以同步到es了
注意:
1、canal-adapter自带mysql连接使用的5.x的,如果自己安装的是高版本的mysql需要自己去/usr/local/soft/canal-adapter/lib增加对应的jar包
2、因项目中同步es使用的sql中有数据库中没有的字段,导致原生程序一直报异常,后修改源码中

推荐阅读