Skip to content
survior edited this page May 7, 2018 · 6 revisions

二.canal-server配置

canal-server要和mysql实例在同一台机器。

(1).canal.properties主要配置项

1.canal-server实例自身配置

canal.id= 1234 //canal-server模拟自己是mysql-slave, 这个id相当于mysql-slaveId,要保持同master所有的slaves中不同的slaveId。

canal.ip= //不需要配置

canal.port= 11111 //异地canal-client调用canal-server时,使用的canal-server本地的port号设置。如果当前机器有多个canal-server,要配置不同的port。

2.binlog过滤内容相关的配置:

canal.instance.filter.druid.ddl = true //true:过滤ddl,ddl不要自动搞。

canal.instance.filter.query.dcl = false //false:事务相关操作不能过滤,要捕获 涉及到事务的还需要再仔细看下。

canal.instance.filter.query.dml = false //false:dml(insert,update,delete,select)操作不能过滤,要捕获,最关建的sql。

canal.instance.filter.query.ddl = true //true:过滤ddl语句中的query部分,不需要,用false关闭。

canal.instance.filter.table.error = true //是否忽略表解析异常 true为忽略。

canal.instance.filter.rows = false //新增rows过滤,用于仅订阅除rows以外的数据 要使用默认制(false),使用mysql-binlog的row方式。

3.ha相关配置:

是否使用待考虑。

三.canal源码:

1.canal解析binlog的类

LogEventConvert(基于Linux log-event).parse(LogEvent logEvent, boolean isSeek) logEvent->Entry(canal里的标准)

四.各种问题:

1.使用canal 1.0.25,启动canal服务端时或更新数据库数据时,canal服务端报错

参考:

https://blog.csdn.net/J_bean/article/details/80027705

https://github.com/alibaba/canal/issues/494#issuecomment-372236518

com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'XX') …

引起这个问题的原因是创建表的SQL语句中有“)”。根本原因是canal依赖的druid版本的问题。

目前的解决办法如下。在conf/canal.properties文件里,将如下所示的一行配置信息注释掉,然后重启就好了。

#canal.instance.tsdb.spring.xml=classpath:spring/tsdb/h2-tsdb.xml

真特么坑比!