注:关于MySql和ES的安装过程,本篇文章不做详细描述
1.配置mysql 部分(binlog日志)
1)找到mysql中的my.ini文件(如下图)
2)修改my.ini中的配置,如下图
port=3306
datadir=xxxxxxx
#开启binlog模式
log_bin=mysql-bin
binlog-format=row
#single DB
binlog-ignore-db=mysql
设置完成之后,重启mysql,输入命令查看binlog是否启用成功
show variables like '%log_bin%';
创建数据库canaldb
create database canaldb;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint(64) NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1557646692725239810 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
2.es配置
1.建立索引如下:
http://localhost:9200/canaldb_user/
{
"mappings": {
"properties": {
"id":{
"type": "integer"
},
"name": {
"type": "text"
},
"sex": {
"type": "text"
},
"address": {
"type": "text"
}
}
}
}
3.配置canal(v1.1.5)部分
1)下载canal1.1.5
官方下载地址:Releases · alibaba/canal · GitHub
如果下载很慢提供下载地址,如失效联系我:
链接:https://pan.baidu.com/s/1V9uZHA3WMIL5DfUTkjPhhQ
提取码:bfwf
2)配置 canal.deployer
canal.deployer-1.1.5\conf\example\instance.properties
修改为如下配置
启动 canal.deployer 进入canal.deployer-1.1.5\bin 双击 startup.bat
3)配置canal.adapter
1.配置canal.adapter-1.1.5\conf\bootstrap.yml 内容如下
注意:hosts 一定要http:// 开头的
srcDataSources:
defaultDS:
url: jdbc:mysql://127.0.0.1:3306/canaldb?useUnicode=true
username: canal
password: canal
canalAdapters:
- instance: example # canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
- name: es7 #es配置,这里使用9200通信 也就是rest模式
hosts: "http://127.0.0.1:9200"
properties:
mode: rest # or rest
# # security.auth: test:123456 # only used for rest mode
cluster.name: elasticsearch #集群名字
配置 canal.adapter-1.1.5\conf\es7\mytest_user.yml,将mytest_user.yml 改成user.yml
具体配置如下代码:
dataSourceKey: defaultDS
destination: example
groupId: g1
esMapping:
_index: canaldb_user
_id: id
# upsert: true
# pk: id
sql: "select a.id,a.name,a.sex,a.address from user a"
# objFields:
# _labels: array:;
etlCondition: "where a.id>={}"
commitBatch: 3000
3.测试配置
完成以上配置按照以下配置重新启动 mysql->canal-deployer->canal.adapter
启动成功结果如下
canal-deployer:
canal.adapter:
注:canal.adapter启动可能会遇到如下异常
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource
这个是因为Canal中的druid包和 canal.adapter\plugin\client-adapter.es7x-1.1.5-jar-with-dependencies.jar 包中的druid冲突了
为了省略打包等操作,下面我提供一个jar只需要替换(canal-v1.1.5\canal.adapter-1.1.5\plugin)里面的client-adapter.es7x-1.1.5-jar-with-dependencies.jar 就行了
测试数据
1.数据库添加一条数据
2:ccanal.adapter监听到日志: 如果出现 Affected indexes 则说明配置成功
3.es查看