原来用windows本地运行,在本地模拟客户端和服务端,鼓捣了一天都没运行成功。。。最后放弃了,改用

windows的客户端+ubuntu的服务端(客户端程序运行在window,canal监听运行在Ubuntu中)

用到:windows+ubuntu+eclipse+mysql+canal

1、客户端(windows)

  1)用eclipse建一个java项目,建类

  

public class ClientTest {
public static void main(String args[]) {
// 创建链接 这个ip是你虚拟机的ip
CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("10.168.12.43",11111), "example", "", "");
int batchSize = 1000;
int emptyCount = 0;
try {
connector.connect();
connector.subscribe(".*\\..*");
connector.rollback();
int totalEmptyCount = 120;
while (emptyCount < totalEmptyCount) {
Message message = connector.getWithoutAck(batchSize); // 获取指定数量的数据
long batchId = message.getId();
int size = message.getEntries().size();
if (batchId == -1 || size == 0) {
emptyCount++;
System.out.println("empty count : " + emptyCount);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
} else {
emptyCount = 0;
printEntry(message.getEntries());
} connector.ack(batchId); // 提交确认
} System.out.println("empty too many times, exit");
} finally {
connector.disconnect();
}
} private static void printEntry(List<Entry> entrys) {
for (Entry entry : entrys) {
if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN || entry.getEntryType() == EntryType.TRANSACTIONEND) {
continue;
} RowChange rowChage = null;
try {
rowChage = RowChange.parseFrom(entry.getStoreValue());
} catch (Exception e) {
throw new RuntimeException("ERROR ## parser of eromanga-event has an error , data:" + entry.toString(),
e);
} EventType eventType = rowChage.getEventType();
System.out.println(String.format("================&gt; binlog[%s:%s] , name[%s,%s] , eventType : %s",
entry.getHeader().getLogfileName(), entry.getHeader().getLogfileOffset(),
entry.getHeader().getSchemaName(), entry.getHeader().getTableName(),
eventType)); for (RowData rowData : rowChage.getRowDatasList()) {
if (eventType == EventType.DELETE) {
printColumn(rowData.getBeforeColumnsList());
} else if (eventType == EventType.INSERT) {
printColumn(rowData.getAfterColumnsList());
} else {
System.out.println("-------&gt; before");
printColumn(rowData.getBeforeColumnsList());
System.out.println("-------&gt; after");
printColumn(rowData.getAfterColumnsList());
}
}
}
} private static void printColumn(List<Column> columns) {
for (Column column : columns) {
System.out.println(column.getName() + " : " + column.getValue() + " update=" + column.getUpdated());
}
}
}

  2)引入依赖(这里我用的1.0.24最新的是1.1.3)

<dependency>
<groupId>com.alibaba.otter</groupId>
<artifactId>canal.client</artifactId>
<version>1.0.24</version>
</dependency>

    简单吧!!!

2、服务端

  主要工作在这里了!!!

  1、确定你的虚拟机安装了java环境和mysql数据库

  2、查看是否启用了日志

mysql>show variables like 'log_bin';

  3、开启binlog

    如果log_bin关闭,需要在etc下面找到my.cnf,开启binlog:

server_id=1
log-bin=/var/lib/mysql/mysql-bin

  

 4、添加canal mysql数据库账号

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

 5、下载1.0.24的(https://github.com/alibaba/canal/releases/tag/canal-1.0.24)这个包  canal.deployer-1.0.24.tar.gz

 6、修改 vi canal/conf/example/instance.properties

## mysql serverId
canal.instance.mysql.slaveId = 1234
# position info
canal.instance.master.address = 10.168.12.43:3306
canal.instance.master.journal.name =mysql-bin.000003
canal.instance.master.position =
canal.instance.master.timestamp = …… canal.instance.dbUsername = canal
canal.instance.dbPassword = canal
canal.instance.defaultDatabaseName =testcanal
canal.instance.connectionCharset = UTF-8 # table regex
canal.instance.filter.regex = .*\\..*

ip不要写错了,这个是虚拟机的ip,因为要监听的是运行与Ubuntu上的数据库(这里用的mysql)的操作。

testcanal是默认数据库,这个是你要监听的那个表所属的数据库

7、启动canal

sh bin/startup.sh

8、查看日志

vi logs/canal/canal.log
vi logs/example/example.log

看看日志是否启动成功没报错

9、测试

  1)确保startup.sh 文件运行了

  2)在windows上运行上面的ClientTest 程序

  3)在mysql的testcanal数据库中建立表,进行增删改查

  

  4)会在eclipse上打印操作数据库的信息

  

参考:https://www.cnblogs.com/janes/p/9318576.html

canal使用入坑,亲测 !!!!的更多相关文章

  1. Ubuntu环境Docker+K8s+Dashboard的安装配置(无坑亲测)

    安装之前的准备: 安装docker 使用国内 daocloud 一键安装命令: curl -sSL https://get.daocloud.io/docker | sh 直接从dockerhub下载 ...

  2. mac下高效安装 homebrew 及完美避坑姿势 (亲测有效)

    世上无难事,只要找到 Homebrew 的正确安装方式. Homebrew 是什么 Homebrew是 mac的包管理器,仅需执行相应的命令,就能下载安装需要的软件包,可以省掉自己去下载.解压.拖拽( ...

  3. macbookpro安装Ubuntu16.04.1 LTS爬坑之旅。亲测有效(集众家之长)。安装时间为2017-11-19。

    1.格式化U盘 要求:(1)切换分区格式为Mac OS扩展 (日志型):(2)方案(scheme)设置为:GUID Partition Map:如图(使用mac自带磁盘工具) 2.给Ubuntu划分磁 ...

  4. Caffe初学者第一部:Ubuntu14.04上安装caffe(CPU)+Python的详细过程 (亲测成功, 20180524更新)

    前言: 最近在学习深度学习,最先要解决的当然是开源框架的环境安装了.之前一直在学习谷歌的Tensorflow开源框架,最近实验中需要跟别人的算法比较,下载的别人的代码很多都是Caffe的,所以想着搭建 ...

  5. win7 python pdf2image入坑经历

    Python开发菜鸟入坑 项目要求pdf转成图片,网上较多的方案对于windows极其不友好,wand,Pythonmagick(win下载地址:www.lfd.uci.edu/~gohlke/pyt ...

  6. ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名,上传,遍历)(亲测详细)

    做了几天的文件操作,现在来总结一下,错误之处,还望指点!以文件为例,如果对文件夹操作,基本上将File换为Directory即可(例:FileInfo file = new FileInfo(Path ...

  7. webpack入坑之旅(五)加载vue单文件组件

    这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...

  8. 电脑IP改变后oracle em无法登陆的解决办法(亲测)

    以下方法为本人亲测 情况:假设电脑初次安装oracle时的ip是192.168.133.110 那么进入em的地址就是http://192.168.133.110:1158/em/console/lo ...

  9. VS 2013驱动开发 + Windbg + VM双机调试(亲测+详解)

    ------------VS 2013驱动开发 + Windbg + VM双机调试(亲测+详解)------------- WIN10已上线,随之而来的是VS2015:微软在 "WDK760 ...

随机推荐

  1. Docker部署ngnix静态网站

    Hello World 首先获取ngnix镜像(默认的是最新版. docker pull nginx 先来编写一个最简单的Dockerfile,一个Dockerfile修改该Nginx镜像的首页 Do ...

  2. 验证码破解 | Selenium模拟登陆12306

    12306官网登录的验证码破解比较简单,验证码是常规的点触类型验证码,使用超级鹰识别率比较高. 思路: (1)webdriver打开浏览器: (2)先对整个屏幕截屏,通过标签定位找到验证码图片,并定位 ...

  3. ArrayList :货物库存管理(遍历)

        package com.oracle.demo01; import java.util.ArrayList; import java.util.Scanner; public class De ...

  4. pwd函数实现

    /* * 文件名:mypwd.c * 描述: 实现简单的pwd命令 */ #include<stdio.h> #include<stdlib.h> #include<di ...

  5. SVN cornerstone Commit\Update 提示xxx is already Locked解决方法

    点击菜单栏“working copy” 点“clean”: 或者,如下图: 右击,点击“clean”,问题解决.

  6. JavaScript base64 加密解密

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Mongoose 索引

    Mongoose 索引介绍 索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更 快(如果有些字段是用不着的就不要设置索引).MongoDB 的索引几乎与传统的关系型数据库一 ...

  8. FZU Monthly-201905 获奖名单

    FZU Monthly-201905 获奖名单 冠军: 郑学贵 S031702338 一等奖: 林闽沪 S131700309 罗继鸿 S031702524 二等奖: 苏锦程 S031802325 林鑫 ...

  9. 【Gamma】Scrum Meeting 1 & 与助教谈话

    前言 Gamma阶段第1次会议在5月26日22:00由PM在大运村一公寓三层召开, 时长30min. 任务分配 姓名 今日任务 明日任务 困难 周博闻 用户控制器解耦和注释 用户控制器解耦和注释 周国 ...

  10. win10系统优化方法及chkdsk工具使用

    发现安装了测试版的Win10真的很慢!其实Win10在每次升级后,的确会比老版慢上很多,这只要是因为新增加的安全功能,往往会对系统速度造成拖累.但有很多方法都可以让你的系统运行如飞. http://b ...