一、下载和安装
#服务端(监听)
wget https://github.com/alibaba/canal/releases/download/canal-1.1.6/canal.deployer-1.1.6.tar.gz
#客户端(调用端)
wget https://github.com/alibaba/canal/releases/download/canal-1.1.6/canal.adapter-1.1.6.tar.gz
#可视化界面
https://github.com/alibaba/canal/releases/download/canal-1.1.6/canal.admin-1.1.6.tar.gz
二、canal的工作原理
1、mysql的主从复制过程
- Master主库将改变记录、写到二进制日志binlog中
- Slaver从库向MysqlMaster发送dump协议,将master主库的binary log events拷贝到中继日志(relay log)
- Salver读取并重做中继日志中的事件,将改变的数据同步到自己的数据库
2、canal工作原理
伪装成slaver,从master复制数据
3、使用场景
canal是阿里otter(阿里用于异步数据库之间的同步框架)的一部分
常用场景1:更新缓存
常用场景2:抓取业务表的增量变化(同步数据到另外一个数据库中)
三、mysql开启binlog日志
vim /etc/mysql/my.cnf
server-id=1
# 指定binlog日志存储位置
log-bin=/var/lib/mysql/mysql-bin
# 开启GTID模式
gtid-mode=ON
# 设置主从强一致性
enforce-gtid-consistency=1
# 记录日志
log-slave-updates=1
binlog_format=ROW
#binlog-do-db 具体要同步的数据库
binlog-do-db = yfc
重启mysql使配置生效:
sudo service mysql restart
查看binlog日志文件列表:
show binary logs;
四、安装部署canal
1、canal-devloper
1、解压文件
tar -zxvf canal.deployer-1.1.6.tar.gz
2、更改配置
1、canal.properties (系统根配置文件)
指定目的文件
2、instance.properties(instance.properties的优先级高于canal.properties)
实际需要修改的配置文件:
需要修改的几处配置
#源数据库地址
canal.instance.master.address=localhotse:3306
#查询元数据库中的配置
canal.instance.master.journal.name=mysql-bin.000003
canal.instance.master.position=194
#........
#数据的账号和密码
canal.instance.dbUsername=root
canal.instance.dbPassword=123456
canal.instance.connectionCharset = UTF-8
show master status命令列出了日志位点信息,包括binlog file,binlog position等
canal.instance.dbUsername=root
canal.instance.dbPassword=123456
canal.instance.connectionCharset = UTF-8
回到主目录启动服务:
sh bin/startup.sh
查看启动日志
tail -n 100 logs/canal/canal.log
#查看实例的日志
tail -n 100 logs/example/example.log
至此:canal服务端启动成功
2、canal-adapter
注:我在搭建cklickhouse的时候没有默认没有设置账户和密码,所以账号密码不用填
srcDataSources:
defaultDS:
url: jdbc:mysql://localhost:3306/yfc?useUnicode=true
username: root
password: Aa123123
canalAdapters:
- instance: example # canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
- name: rdb
key: mysql1
properties:
jdbc.driverClassName: ru.yandex.clickhouse.ClickHouseDriver
jdbc.url: jdbc:clickhouse://localhost:8123/yfc?useUnicode=true
jdbc.username: default
jdbc.password:
修改同步表文件:
dataSourceKey: defaultDS
destination: example
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:
database: yfc
table: sku_info
targetTable: yfc.sku_info
targetPk:
id: id
# mapAll: true
targetColumns:
id:
name:
role_id:
c_time:
test1:
etlCondition: "where c_time>={}"
commitBatch: 3000 # 批量提交的大小
## Mirror schema synchronize config
#dataSourceKey: defaultDS
#destination: example
#groupId: g1
#outerAdapterKey: mysql1
#concurrent: true
#dbMapping:
# mirrorDb: true
# database: mytest
加载顺序:bootstrap.yml (配置如下)> application.yml
3、canal-admin
进入conf配置文件编辑
如下图:
执行sql脚本(使用可视化客户端需要在sql中初始化脚本canal_manager.sql)
成功标志:
新增一条数据看看:
修改
删除:
至此,mysql通过canal同步数据结束