栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux安装canal实现增量数据同步

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux安装canal实现增量数据同步

前言:本文章将采用docker方式安装canal

canal主要用途是基于 MySQL 数据库增量日志解析,并能提供增量数据订阅和消费。

  • github地址:https://github.com/alibaba/canal
  • 版本下载地址:https://github.com/alibaba/canal/releases
  • 文档地址:https://github.com/alibaba/canal/wiki/Docker-QuickStart

Canal应用场景

1.电商场景下商品、用户实时更新同步到至Elasticsearch、solr等搜索引擎;
2.价格、库存发生变更实时同步到redis;
3.数据库异地备份、数据同步;
4.代替使用轮询数据库方式来监控数据库变更,有效改善轮询耗费数据库资源。

一、安装mysql
1、在/tmp目录下创建mysql数据卷挂载目录

注:创建数据卷是为了方便修改mysql的配置

1.1、创建配置文件挂载目录:
[root@k8s-master1 /]# mkdir -p /tmp/mysql/conf
1.2、创建配置文件并添加如下内容
[root@k8s-master1 /]# vim /tmp/mysql/conf/hmy.cnf
[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
# 开启 binlog,方便后续对接canal
log-bin=/var/lib/mysql/mysql-bin
# 选择 ROW 模式,方便后续对接canal
binlog-format=ROW
# 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
server-id=1000

1.3、创建mysql数据卷挂载目录
[root@k8s-master1 /]# mkdir -p /tmp/mysql/data
2、docker安装mysql
[root@k8s-master1 /]# docker run --name mysql  -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /tmp/mysql/data:/var/lib/mysql -d mysql:5.7.25
3、创建数据库用户并授权

授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限,在数据库连接工具里面,执行下面的语句即可:

create user canal@'%' IDENTIFIED by 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
4、查看bin-log是否已开启

二、安装canal
1、拉取镜像
[root@k8s-master1 /]# docker pull canal/canal-server:v1.1.1
2、安装canal-server容器

[root@k8s-master1 /]# docker run -p 11111:11111 --name canal -d canal/canal-server:v1.1.1

注意:若canal服务启动后自动停止,则需注意虚拟机内存,将暂时不用的服务关掉,再重启canal即可!

3、修改canal-server配置

1、进入canal容器内部,修改/home/admin/canal-server/conf/canal.properties,将它的id属性修改成和mysql数据库中server-id不同的值。
注意:容器默认进入/home/admin目录下!!
注意:容器默认进入/home/admin目录下!!
注意:容器默认进入/home/admin目录下!!

[root@k8s-master1 /]# docker exec -it canal bash
[root@43d1c9546cf0 admin]# ls
app.sh  bin  canal-server  health.sh
[root@43d1c9546cf0 admin]# cd canal-server/
[root@43d1c9546cf0 canal-server]# ls
bin  conf  lib  logs
[root@43d1c9546cf0 canal-server]# cd conf/
[root@43d1c9546cf0 conf]# ls
canal.properties  example  logback.xml  metrics  mq.yml  spring
[root@43d1c9546cf0 conf]# vi canal.properties 


2、修改/home/admin/canal-server/conf/example/instance.properties,配置要监听的数据库服务地址和监听数据变化的数据库以及表,修改如下:

[root@43d1c9546cf0 admin]# cd /home/admin/canal-server/conf/example
[root@43d1c9546cf0 example]# ls
h2.mv.db  instance.properties
[root@43d1c9546cf0 example]# vi instance.properties 


其中,属性canal.instance.filter.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 (逗号分隔)
注意:此过滤条件只针对row模式的数据有效(ps. mixed/statement因为不解析sql,所以无法准确提取tableName进行过滤)

3、退出容器并重启容器

[root@k8s-master1 /]# docker restart canal
三、springboot整合canal,实现增量数据同步

参考地址:https://github.com/NormanGyllenhaal/canal-client

1、pom文件



    
        miaosha-service
        com.miaosha
        0.0.1-SNAPSHOT
    
    4.0.0
    miaosha-canal

    
        
        
            top.javatool
            canal-spring-boot-autoconfigure
            1.2.1-RELEASE
        
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                    com.miaosha.CanalApplication
                    ZIP
                
                
                    
                        
                            repackage
                        
                    
                
            
        
    

2、yaml文件

server:
  port: 8088
#Canal配置
canal:
  server: canal-server:11111
  destination: example
#日志
logging:
  level:
    root: error

3、创建SkuHandler并实现EntryHandler接口。

@Component
//监控数据表
@CanalTable(value = "tb_sku")
public class SkuHandler implements EntryHandler {

    
    @Override
    public void insert(Sku sku) {
        //添加业务操作
    }

    
    @Override
    public void update(Sku before, Sku after) {
        //修改业务操作
    }

    
    @Override
    public void delete(Sku sku) {
        //删除业务操作
    }
}

自此,完成!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/510095.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号