MariaDB到MySQL数据实时同步(单表/Canal版)

一、版本介绍

        MariaDB:10.5.17-MariaDB

        MySQL:mysql-5.7.42

        Canal:canal.deployer-1.1.7-SNAPSHOT、canal.adapter-1.1.7-SNAPSHOT

二、原理

        Canal.deployer作为Canal服务端,伪装成MySQL从数据库,通过配置直接监听MariaDB数据库binlog文件,通过对binlog文件的解析,外加Canal.adapter对数据做ETL处理和适配,将数据送至MySQL中,数据实时同步。

三、步骤

        配置MariaDB

        在/etc/my.cnf.d/server.cnf文件中的[mysqld]下添加如下两行

        log-bin=mysql-bin

        binlog_format=ROW

        配置Canal.deployer

        在解压路径下找到conf/canal.properties文件

        记录其中canal.destinations = example  属性,这是canal的连接实例。

        在conf/example路径下存在instance.properties配置文件。

        重点注意以下配置项        canal.instance.master.address--MariaDB数据库ip地址及端口

        canal.instance.dbUsername=canal--MariaDB数据库连接账号

        canal.instance.dbPassword=canal--MariaDB数据库连接密码

        canal.instance.filter.regex--binlog白名单,仅筛选白名单中存在的库或者表

        canal.instance.filter.black.regex--binlog黑名单,过滤掉黑名单中存在的库或者表

        配置Canal.adapter

        编辑conf/application.yml

        

         192.168.0.1-MariaDB  192.168.0.2-MySQL

        以下是MariaDB的aaa数据库同步数据至MySQL的aaa数据库

        编辑application.yml

        

        srcDataSources:源数据库配置

        canalAdapters:目标数据库配置

         需要在conf/rdb/路径下创建和实例名一样的配置文件

        

         

        dataSourceKey: defaultDS--application.yml中的srcDataSources(源数据库配置名)
        destination: example--实例名称
        groupId: g1--canalAdapters.groups.groupId
        outerAdapterKey: example--canalAdapters.groups.outerAdapters.key
        concurrent: true
        dbMapping:--数据库
          database: aaa--源数据库
          table: ccc--需要同步的表
          targetTable: ccc--目标表
          targetPk:--目标表主键
            id: id
          mapAll: true--是否是所有键同步
        #  targetColumns:--非所有键同步时单独配置键对应关系
        #    id: id
        #    name: name

        #dbMapping:--整个数据库同步时用此配置
        #  mirrorDb: true
        #  database: aaa

        MySQL配置

        在/etc/my.cnf中的[mysqld]下添加如下配置

        log-bin=mysql-bin   # [必须]启用二进制日志 

        server-id=78      #服务id  一般取IP最后一段

        binlog_format=ROW

四、重启

        按顺序重启MariaDB->canal.deployer->canal.adapter->MySQL

        其中canal.deployer和canal.adapter在conf路径同级目录下的bin路径中有启动文件

五、演示

        新增数据

        修改数据

        删除数据

六、总结

        1、记住canal.deployer是作为一个canal的服务端,同时它也是源数据库的从库(自我伪装的)

        2、canal.deployer是作为一个从库的角色存在,所以它不能同时接收多个数据源的数据至同一个canal服务端

        3、canal.adapter可以称之为连接器,配置了源数据库信息以及目标数据库信息,并实现了数据实时同步

        4、有做测试,大批量数据进入MariaDB时,Canal消费不过来,响应并没有那么快,此时MariaDB中的数据有新增1300万条,MySQL数据库中查看仅有200多万,但是会慢慢增长,最终和MariaDB中的数据量一致

七、彩蛋

        MariaDB本身就是MySQL的另一个版本,为什么不能直接通过binlog来进行主从配置并同步数据呢!哈哈哈!!!

        当然他们之间是可以通过配置实现主从数据库同步的,这里是为了解决MariaDB到MySQL到ClickHouse数据实时同步,才引入了canal作为中间传输工具,因为这三者不能直接配置成功。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值