canal实现mysql同步到clickhouse

一、下载和安装

#服务端(监听)
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同步数据结束 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
实现MySQL实时同步MySQL可以借助canal工具来完成。 canal是阿里巴巴开源的一款基于MySQL增量日志解析,仅支持MySQL数据库的日志增量订阅和消费工具。通过订阅MySQL的binlog日志,canal可以获取到数据库的增量更新信息,并将这些信息解析后发送给其他应用进行消费。 为了实现MySQL实时同步MySQL,可以按照以下步骤进行操作: 1. 下载并安装canal工具。可以从canal的官方GitHub仓库下载最新版本的canal压缩包,并解压到指定目录。 2. 配置canal。在canal的配置文件中,需要设置MySQL的连接信息、要订阅的数据库和表信息等。 3. 启动canal。在命令行中切换到canal所在的目录,执行启动命令,让canal开始监听MySQL的binlog日志。 4. 消费binlog信息。通过编写Java等编程语言的消费端程序,连接到canal并接收解析后的binlog信息。在消费端程序中,可以根据业务需求将解析后的增量更新信息同步到另一个MySQL数据库中。 需要注意的是,由于canal只是将MySQL的增量日志解析成了结构化的数据,并没有提供具体同步MySQL的功能。因此,在步骤4中编写的消费端程序需要自行实现将解析后的binlog信息同步到另一个MySQL数据库的逻辑。 值得一提的是,canal还支持其他类型的消息队列,如Kafka等,通过消息队列可以实现更多应用场景下的实时数据同步。 总结而言,利用canal工具可以实现MySQL实时同步MySQL,通过订阅MySQL的binlog日志并解析后发送给消费端程序,再进行相应的同步操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值