canal简介:https://github.com/alibaba/canal

1、数据库配置

首先使用canal需要修改数据库配置

  1. [mysqld]
  2. log-bin=mysql-bin # 开启 binlog
  3. binlog-format=ROW # 选择 ROW 模式
  4. server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

创建canal数据库用户

  1. CREATE USER canal IDENTIFIED BY 'canal';
  2. GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
  3. FLUSH PRIVILEGES;

2、安装canal

下载:https://github.com/alibaba/canal/releases

解压(修改版本号):tar zxvf canal.deployer-1.1.4.tar.gz -C ./canal

配置开放服务器端口:11110、11111、11112

修改canal配置文件(这里设置了两个instance,即两个数据库):

  1. vi canal/conf/canal.properties
  2. canal.destinations = example1,example2

配置instance:

  1. cp -R canal/conf/example conf/example1
  2. mv conf/example conf/example2

第一个数据库配置

  1. vi canal/conf/example1/instance.properties
  2. canal.instance.master.address=32.1.2.140:

第二个数据库配置

  1. vi canal/conf/example2/instance.properties
  2. canal.instance.master.address=32.1.2.140:

#如果需要新增一个instance,只需要修改canal.properties文件,并新增一个instance配置即可,无需重启canal。

运行:

  1. sh canal/bin/startup.sh
  2. # 查看日志
  3. cat canal/logs/canal/canal

3、Java使用样例

引入pom依赖,需要与安装的canal版本一致

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.alibaba.otter</groupId>
  4. <artifactId>canal.client</artifactId>
  5. <version>1.1.</version>
  6. </dependency>
  7. </dependencies>

示例代码(异步打印两个数据库的修改内容):

  1. package cn.spicybar.dblog;
  2.  
  3. import com.alibaba.otter.canal.client.CanalConnector;
  4. import com.alibaba.otter.canal.client.CanalConnectors;
  5. import com.alibaba.otter.canal.protocol.CanalEntry.Entry;
  6. import com.alibaba.otter.canal.protocol.CanalEntry.EntryType;
  7. import com.alibaba.otter.canal.protocol.CanalEntry.RowChange;
  8. import com.alibaba.otter.canal.protocol.Message;
  9.  
  10. import java.net.InetSocketAddress;
  11. import java.util.List;
  12.  
  13. public class CanalClient {
  14.  
  15. public static void main(String[] args) {
  16. new Thread(() -> initConnector("example1")).start();
  17. new Thread(() -> initConnector("example2")).start();
  18. }
  19.  
  20. private static void initConnector(String destination) {
  21. CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("32.1.0.237", 11111), destination, "", "");
  22. try {
  23. connector.connect();
  24. connector.subscribe(".*\\..*");
  25. connector.rollback();
  26. while (true) {
  27. Message message = connector.getWithoutAck(1000);
  28. if (message.getId() != -1 && message.getEntries().size() > 0) {
  29. printEntry(message.getEntries());
  30. }
  31. connector.ack(message.getId());
  32. }
  33. } finally {
  34. connector.disconnect();
  35. }
  36. }
  37.  
  38. private static void printEntry(List<Entry> entries) {
  39. for (Entry entry : entries) {
  40. if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN || entry.getEntryType() == EntryType.TRANSACTIONEND) {
  41. continue;
  42. }
  43. try {
  44. RowChange rowChange = RowChange.parseFrom(entry.getStoreValue());
  45. System.out.println(rowChange.getSql());
  46. } catch (Exception e) {
  47. throw new RuntimeException("ERROR ## parser error, data:" + entry.toString(), e);
  48. }
  49. }
  50. }
  51.  
  52. }

canal简单安装使用的更多相关文章

  1. tftp服务器简单安装配置

    tftp服务器最简单安装配置 1.安装tftp-server sudo apt-get install tftpd-hpa sudo apt-get install tftp-hpa(如果不需要客户端 ...

  2. 【elasticsearch】(2)centos7 超简单安装elasticsearch 的监控、测试的集群工具elasticsearch head

    elasticsearch-head是elasticsearch(下面称ES)比较普遍使用的可监控.测试等功能的集群管理工具,是由H5编写的单独的网页程序.使用方法网上很多,这里教大家一个超简单安装h ...

  3. Redis简介与简单安装

    Redis简介与简单安装   一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类 ...

  4. Ubuntu Docker 简单安装 GitLab

    相关博文: Ubuntu 简单安装 Docker Ubuntu 简单安装和配置 GitLab 服务器版本 Ubuntu 16.04 LTS. 1. 安装和配置 安装命令: sudo docker ru ...

  5. redis5.0.3单实例简单安装记录

    redis5.0.3单实例简单安装记录 日常需要测试使用,索性记录下来,免得临时又麻烦的找资料. yum -y install make gcc-c++ cmake bison-devel ncurs ...

  6. Resharper简单安装及代码覆盖率的测试

    Resharper简单安装及代码覆盖率的测试 测试环境:VS 2015 专业版 一.下载Resharper 官方链接:https://www.jetbrains.com/resharper/ 点击下载 ...

  7. Linux系统下MongoDB的简单安装与基本操作

    这篇文章主要介绍了Linux系统下MongoDB的简单安装与基本操作,需要的朋友可以参考下   Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备 ...

  8. ubuntu14 简单安装ffmpeg

    1.简单安装 sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next     sudo apt-get update     sudo apt ...

  9. java:安装tomcat8/tomcat9(简单安装配置)

    java:安装tomcat8/tomcat9(简单安装配置) pache-tomcat-8.5.23(免安装板) 1.安装完成后右击我的电脑—属性—高级系统设置—环境变量, 在系统变量中添加以下变量 ...

随机推荐

  1. -Git 使用技巧 总结 MD

    目录 目录 Bash下的快捷操作 常用命令 常用操作 移动光标 删除输入内容 Tab键的作用 Git默认Vim编辑器基本使用 Git 使用场景 合并多个commit:rebase -i[s] 删除多个 ...

  2. winform datagridview控件使用

    最近做项目时,显示查询结果总需要绑定到datagridview控件上显示,总结了给datagridview绑定数据的方式,以及导出datagridview数据到excel表格,如有错误请多指教 1.直 ...

  3. Django--模型层进阶

    目录 QuerySet对象 可切片 可迭代 惰性查询 缓存机制 何时查询集不会被缓存? exists()与iterator()方法 exists() iterator() 中介模型 查询优化 表数据 ...

  4. CSS怎么隐藏滚动条(三种方法)

    xhtml中隐藏滚动条在用ie6浏览有框架的xhtml页面的时候,默认会水平和垂直滚动条会一起出现,这是ie6的一个bug,在firefox上是正常的,出现的原因是其对XHTML 1.0 transi ...

  5. Servlet 入门

    静态web页面:html+css+js,页面是静态的.不变的,显示给每个用户的页面都一样. 动态web页面:php.jsp.asp,根据用户.实时数据(数据库)来动态显示页面,不同的用户,显示的页面可 ...

  6. Java JDBC事务

    JDBC默认是自动提交,事务是关闭的,statement|preparedStatement.executeUpdate()或excute()执行增删改,执行一次就提交一次(自动同步到数据库). JD ...

  7. Charles弱网测试转载

    一.破解版安装 工具好用是好用,但有个蛋疼的地方,非开源,非开源也就算了,还来个试用30分钟,当时的我就中这招了, 试用了之后发现这工具确实好用,对于测试工程师来说兼抓包定位协议类bug.设置网络阀来 ...

  8. Linux运维技术之LVM(逻辑卷管理)

    DM :逻辑设备(模块)--->LVM 优点: 个分区) 2.1.partprobe  /dev/sdb : 使用partprobe可以不用重启系统即可配合fdisk工具创建新的分区 2.2.c ...

  9. adb命令 判断锁屏

    通过adb命令获取手机是否锁屏状态,可以通过下面指令:1.adb shell dumpsys window policy |find "isStatusBarKeyguard"2. ...

  10. Beta冲刺——用户使用调查报告

    项目Beta冲刺(团队) --用户使用调查报告 一.项目概述 1.1项目名称 卡战三国 1.2项目简介 一款休闲娱乐益智卡牌游戏 1.3 项目预期目标 开发一款基于三国题材的卡牌通关对战手机游戏 二. ...