docker的mysql配置(链接)和elasticsearch的配置(链接)详见之前的文章,这里不再赘述。本文主要讲解Windows下面安装canal和canal-adapter,并实现同步docker的数据库信息到docker的es。
一、安装java
已安装的可以跳过此步骤。下载地址:java下载
- 配置java环境变量
-
新建JAVA_HOME 变量
输入:
变量名:JAVA_HOME 变量值:电脑上JDK安装的绝对路径
JDK 路径下必须能够看到如下的文件。
- 新建/修改 CLASSPATH 变量
输入变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
- 修改Path 变量
新建两条路径:%JAVA_HOME%\bin %JAVA_HOME%\jre\bin
-
-
检查 打开 cmd,输入 java,出现一连串的指令提示,说明配置成功了:
二、安装配置canal
注意:安装目录不能出现中文
-
下载地址这里以1.1.5版本为例。建议使用迅雷下载。
用压缩软件解压刚刚下载的两个压缩包,然后把解压后的文件放到自己喜欢的目录下。 -
配置
- 修改
canal/conf/example/instance.properties
文件
需要改动的项已在图中框出。
- 修改
canal.instance.master.address=172.16.10.26:3306 #指定要读取binlog的MySQL的IP地址和端口
canal.instance.master.journal.name= #从指定的binlog文件开始读取数据
canal.instance.master.position= #指定偏移量,做过主从复制的应该都理解这两个参数。
#tips:binlog和偏移量也可以不指定,则canal-server会从当前的位置开始读取。我建议不设置
canal.instance.master.timestamp= #mysql主库链接时起始的binlog的时间戳,默认:无
# username/password
canal.instance.dbUsername=canal #指定连接mysql的用户密码
canal.instance.dbPassword=Aa123456.
canal.instance.connectionCharset = UTF-8 #字符集
# table regex
# mysql 数据解析关注的表,Perl正则表达式.多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\)
# 常见例子:
# 1. 所有表:.* or .*\\..*
# 2. canal schema下所有表: canal\\..*
# 3. canal下的以canal打头的表:canal\\.canal.*
# 4. canal schema下的一张表:canal.test1
# 5. 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
canal.instance.filter.regex=risk.canal,risk.cwx #这个是比较重要的参数,匹配库表白名单,比如我只要test库的user表的增量数据,则这样写 test.user
- 启动
双击bin目录下的startup.bat
查看 server 日志 日志在
canal.deployer-1.1.5
目录的logs
文件夹下。修改
canal.adapter-1.1.5/conf/application.yml
文件。
- 新建
canal.adapter-1.1.5/conf/es7/canal.yml
文件,将下面的内容粘贴进去
dataSourceKey: defaultDS #指定数据源,这个值和adapter的application.yml文件中配置的srcDataSources值对应。
destination: example #指定canal-server中配置的某个实例的名字,注意:我们可能配置多个实例,你要清楚的知道每个实例收集的是那些数据,不要瞎搞。
groupId: g1 #组ID,对应application.yml中的canalAdapters/groups/groupId中的值
outerAdapterKey: db1Key #对应application.yml中的canalAdapters/groups/outerAdapters/name/key中的值
esMapping: #ES的mapping(映射)
_index: canal #要同步到的ES的索引名称(自定义),需要自己在ES上创建哦!
#_type: _doc #ES索引的类型名称(自定义)
_id: _id #ES标示文档的唯一标示,通常对应数据表中的主键ID字段,注意我这里写成的是"_id",有个下划线哦!
#pk: id #如果不需要_id, 则需要指定一个属性为主键属性
sql: "select t.id as _id, t.name, t.sex, t.age, t.amount, t.email, t.occur_time from canal t" #这里就是数据表中的每个字段到ES索引中叫什么名字的sql映射,注意映射到es中的每个字段都要是唯一的,不能重复。
#etlCondition: "where t.occur_time>='{0}'"
commitBatch: 3000
mysql-connector-java下载5.1.27版本的jar文件,拷贝到canal-adapter文件夹下的lib文件夹,然后把之前的删掉。
- 创建表
CREATE TABLE `canal` (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(20) NULL COMMENT '名称',
sex varchar(2) NULL COMMENT '性别',
age int NULL COMMENT '年龄',
amount decimal(12,2) NULL COMMENT '资产',
email varchar(50) NULL COMMENT '邮箱',
occur_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-
创建es索引
-
创建mapping
{
"properties": {
"id": {
"type": "long"
},
"name": {
"type": "text"
},
"sex": {
"type": "text"
},
"age": {
"type": "long"
},
"amount": {
"type": "text"
},
"email": {
"type": "text"
},
"occur_time": {
"type": "date"
}
}
}
- 启动
canal-adapter
双击bin目录下的startup.bat
- 查看 adapter 日志 日志在
canal.adapter-1.1.5
目录的logs
文件夹下。 - 插入1条数据:
insert into canal(id,name,sex,age,amount,email,occur_time) values(null,'cwx','男',18,100000000,'249299170@qq.com',now());
- 更新1条数据:
update canal set name='cwx1',sex='女',age=28,amount=200000,email='asdf',occur_time=now() where id=1;
- 删除1条数据:
delete from canal where id=1;
- 需要同步哪个配置就去运行
curl -X POST 'localhost:8081/etl/es7/db1Key/canal.yml'
补充
一、如果启动canal-adapter报以下错误
java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource
这个是 druid 包冲突导致的,解决办法如下
-
下载源码包 下载
解压后,使用IDEA打开,定位到 client-adapter.escore 模块的 pom.xml 的 druid 更新为
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<scope>provided</scope>
</dependency>
- 更新后,在项目根目录下执行
mvn clean package
- 然后到
canal-canal-1.1.5/client-adapter/es7x/target
下 将打包好的client-adapter.es7x-1.1.5-jar-with-dependencies.jar
替换掉canal-adapter/plugin
下原来的,重启 Canal Adapter即可。
二、 如果mvn命令无法使用,可以先安装maven工具 下载
- 解压maven 放在需要安装的目录
-
配置环境变量
- 在终端输入以下命令,查看是否安装成功
mvn -v
本文结束。