因为自己项目中需要用到mysql数据同步到es中,查找了相关资料最后决定用canal来做,所以便有了本文,下面一起来看如何使用canal吧

canal教程

根据 https://github.com/alibaba/canal 上的原理解释,我们知道 canal 会模拟 mysql slave 的交互协议,伪装自己为 mysql slave,然后向 mysql master 发送 dump 协议。

mysql master 收到 dump 请求,开始推送 binary log 给 slave(也就是 canal),然后 canal 解析 binary log 对象(原始为 byte流)。

经 canal 解析过的对象,我们使用起来就非常的方便了。

再根据 https://github.com/alibaba/canal/releases 提供的版本信息,你会发现 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/目录下。然后依次执行下面的命令:

mkdir canalcd canaltar -zxvf ../canal.deployer-1.1.4-SNAPSHOT.tar.gz

然后修改 canal 的配置文件 vim conf/example/instance.properties

这三项改成你自己的,比如我的配置如下:

canal.instance.dbUsername=canalcanal.instance.dbPassword=canalcanal.instance.connectionCharset = UTF-8canal.instance.defaultDatabaseName =canal_test

然后保存并退出。(VI 模式下,按 Esc 输入 :wq 回车退出。)

接着,我们检查一下 MySQL 的配置。确定版本和是否开启了 binlog 日志,以及日志格式。

show variables like 'binlog_format';show variables like 'log_bin';select version();

canal 支持 binlog 格式为 ROW 的模式。如果你没开启 binlog,并且格式是非 row 的,建议修改一下 mysql 的配置文件。

执行 mysql –help | grep my.cnf 找到 mysql 的 my.cnf 文件。

执行 vim /etc/my.cnf 命令。添加下面 3 个配置。

log-bin=mysql-bin #添加这一行就okbinlog-format=ROW #选择row模式server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复

然后保存并退出。

接着执行 sudo service mysqld restart 重启 MySQL。

需要注意的是你的 mysql 用户,必须要有 REPLICATION SLAVE 权限。该权限授予 slave 服务器以该账户连接 master 后可以执行 replicate 操作的权利。

如果没有权限,则使用 root 账户登录进 MySQL,执行下面的语句,创建用户,分配权限。

CREATE USER canal IDENTIFIED BY ‘canal’;GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘‘canal’’@’%’;FLUSH PRIVILEGES;

MySQL 启动后,就可以开启 canal 服务了。

/usr/local/soft/canal/bin/startup.sh

开启后,观察 canal 服务的日志,确保服务正常。

tail 300f /usr/local/soft/canal/logs/canal/canal.log

查看 canal 的日志

确定没有问题后,开始编写我们的测试程序。

pom.xml 中导入下面的依赖。

com.alibaba.otter canal.client 1.1.4

使用JAVA进行测试

import java.net.InetSocketAddress;import java.util.List;import com.alibaba.otter.canal.client.CanalConnectors;import com.alibaba.otter.canal.client.CanalConnector;import com.alibaba.otter.canal.common.utils.AddressUtils;import com.alibaba.otter.canal.protocol.Message;import com.alibaba.otter.canal.protocol.CanalEntry.Column;import com.alibaba.otter.canal.protocol.CanalEntry.Entry;import com.alibaba.otter.canal.protocol.CanalEntry.EntryType;import com.alibaba.otter.canal.protocol.CanalEntry.EventType;import com.alibaba.otter.canal.protocol.CanalEntry.RowChange;import com.alibaba.otter.canal.protocol.CanalEntry.RowData;public class SimpleCanalClientExample {public static void main(String args[]) { // 创建链接 CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(AddressUtils.getHostIp(), 11111), "example

es 全量同步mysql_使用canal将mysql同步到es中相关推荐

  1. es 全量同步mysql_什么时候该用MySQL,什么时候该用ES呢?

    作者:张sir 来源:京东技术 京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调用量都非常大,造成了订单数据读多写少的情况. 我们把订单数据存储在MySQL ...

  2. flink实时同步mysql_基于Canal与Flink实现数据实时增量同步(一)

    点击上方蓝色字体,关注我 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 准备 配置 ...

  3. 增量同步_实战 | canal 实现Mysql到Elasticsearch实时增量同步

    题记 关系型数据库Mysql/Oracle增量同步Elasticsearch是持续关注的问题,也是社区.QQ群等讨论最多的问题之一. 问题包含但不限于: 1.Mysql如何同步到Elasticsear ...

  4. canal实现mysql同步Elasticsearch数据linux中安装ELK

    linux中ELK数据同步 前言 ElasticSearch安装 下载安装包&&添加es用户 启动 ElasticSearch HEAD安装 下载&&安装 配置 设置跨 ...

  5. pymy 监控mysql_用Python对MySQL同步状态进行监控_MySQL

    用Python对MySQL同步状态进行监控 使用Python对MySQL数据库服务器是否可访问,及主从同步是否中断进行监控,是一件非常简单的事情.感谢Python给我们带来了如此简单,强大,快捷的开发 ...

  6. elastic如何和mysql同步数据_MySQL数据库之mysql 同步数据到 ElasticSearch 的方案

    本文主要向大家介绍了MySQL数据库之mysql 同步数据到 ElasticSearch 的方案 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. MySQL Binlog 要通过 ...

  7. 基于数据库数据增量同步_基于canal实现分布式数据同步

    应用场景 分布式架构中,数据同步常常是个大问题.例如,mysql中的数据,可能在ElasticSearch有一份索引,在redis有一份缓存,在Nginx有一份缓存,这时候只要你修改了mysql中的数 ...

  8. mysql nosql 同步_使用canal和canal_mysql_nosql_sync同步mysql数据

    场景: 有两个独立的项目A和B,都使用mysql做数据库, 其中项目A中有一个表存储新闻资讯,字段有新闻id,标题title,类型type,内容data. 后来项目B也需要这个表的数据,但项目B用了两 ...

  9. canal实现mysql同步到clickhouse

    一.下载和安装 #服务端(监听) wget https://github.com/alibaba/canal/releases/download/canal-1.1.6/canal.deployer- ...

最新文章

  1. 域名怎么设置非80端口_深信服网关怎么设置端口映射
  2. 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档(转
  3. Ubuntu下安装DEB包时出现错误的解救方法
  4. 【多线程高并发】深入浅出volatile关键字
  5. python3读取csv和xlsx文件
  6. powerdesigner连接db2生成模型步骤
  7. IIS6注册.net4.0
  8. matlab2c使用c++实现matlab函数系列教程-nchoosek函数
  9. java 链表实现堆栈_用JAVA实现堆栈(链表篇)
  10. tomcat8和tomcat7性能比较
  11. unity reflect_Unity Reflect在这里
  12. 如何建立团队知识库管理系统,把分散信息有效整理?
  13. unreal 用于三维展示的改造 建筑 模型展示
  14. Mac环境安装imagemagick及使用imagemagick拼接图片
  15. 如何实时抓取动态网页数据?
  16. 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/ch
  17. 固态硬盘用硬盘盒外接但是不显示盘符
  18. 无线热点(AP)不稳定之信道的配置优化实践-分析周围信道修改本地使用信道
  19. Linux写文件断电保存,硬盘写到一半时断电,文件系统里会发生什么?
  20. 浙大版《C语言程序设计实验与习题指导(第4版)》题目集 实验10-1 圆形体体积计算器

热门文章

  1. html5不支持的属性,HTML5 常用语法一览(列举不支持的属性)
  2. java 类及对象的课后作业_JAVA类和对象课后作业
  3. php对象存储hadoop存储,三个理由告诉你对象存储替换HDFS还不错
  4. linux将文件下载到本地windows,XSHELL下直接下载文件到本地(Windows)
  5. 图像风格迁移_图像风格迁移—谷歌大脑团队任意图像风格化迁移论文详解
  6. python访问共享文件夹 exist false_python os.path.exists()对于存在的nfs挂载目录文件失败...
  7. unity镜头边缘羽化_【后期修图】如何利用Ps中的自适应广角滤波器校正镜头失真?...
  8. linux下grpc安装编译,linux下安装grpc插件 (c++和go语言)
  9. 【转】深入理解Windows消息机制
  10. 【转】C#中[STAThread]的作用