美文网首页
SpringCloud Alibaba之Canal ( 数据同步

SpringCloud Alibaba之Canal ( 数据同步

作者: 索性流年 | 来源:发表于2020-04-27 16:35 被阅读0次

    本文为学习笔记

    来自蚂蚁课堂
    链接:http://www.mayikt.com/

    基本概念

    项目地址

    简介

    • canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费
    • 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。

    MySQL 和 Redis 能否保障强一致性?

    • 只要是微服务,很难保证强一致性问题,都是最终一致性

    增量和全量的区别?

    • 增量是实时的操作,对 MySQL 增删改行为进行订阅与消费
    • 全量是在指定时间进行同步,将所有数据统一同步

    MySQL主备复制原理

    • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
    • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
    • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据

    主从复制的作用

    • 对数据实现备份
    • 实现读写分离
    • 实现故障转移
    • 集群

    canal 工作原理

    • canal会启动一个 Server 端 作为 MySQL 从节点拉取主节点最新的binary log 文件
    • MySQL 主节点 binary log 文件一旦发生改变都会以增量的形式通知给canalServer 端
    • canalServer 将接收到的文件发送 canalClient 端 手动配置刷新同步

    使用

    1.配置MySQL配置

    • 开启允许基于binlog文件主从同步
    • windows 下配置文件为 my.ini
    • linux 下配置文件为 my.cnf
    vi /etc/my.cnf
    
    • 增加 log-bin 订阅
    log-bin=mysql-bin #添加这一行就ok
    binlog-format=ROW #选择row模式 
    server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复
    
    • 配置该文件后,重启mysql服务器即可
    #个人安装路径
    cd /usr/local/mysql/bin
    #重启 MySQL 服务
    service mysql restart
    

    检查是否开启log_bin 命令(ON 开启)

    ./mysql -u root -p  #输入密码
    show variables like 'log_bin';
    
    image.png

    退出

     \q
    

    构建CanalService 端

    项目下载地址

    image.png
    • 上传至 Linux /usr/local 目录下
    • 修改、配置文件配置
    /usr/local/canal.deployer-1.1.5-SNAPSHOT/conf/example/instance.properties
    
    • 这里是测试用的 root账户,如若正式环境最好单独创建账号
    • Canal 整合 RocketMQ
    #数据库连接地址
    canal.instance.master.address=127.0.0.1:3306
    #数据库连账号
    canal.instance.dbUsername=root
    #数据库连接密码
    canal.instance.dbPassword=root
    

    整合 RocketMQ

    /usr/local/canal.deployer-1.1.5-SNAPSHOT/conf/example/instance.properties
    
    #设置 mq 连接 
    canal.mq.topic=mysql-redis-topic
    
    • 修改 canal.properties
    /usr/local/canal.deployer-1.1.5-SNAPSHOT/conf/canal.properties
    
    #修改模式
    canal.serverMode = rocketMQ
    #修改 RocketMQ 服务地址
    rocketmq.namesrv.addr = 127.0.0.1:9876
    

    启动

    • 进入 bin 目录
     cd /usr/local/canal.deployer-1.1.5-SNAPSHOT/bin
    
    • 在 Linux 运行
    ./startup.sh
    
    • 在 Windows 下双击 startup.bat
    • 查看 /usr/local/canal.adapter-1.1.5-SNAPSHOT/logs/adapter/adapter.log
    image.png

    停止运行

    cd /usr/local/canal.deployer-1.1.5-SNAPSHOT/bin
    ./stop.sh
    

    相关文章

      网友评论

          本文标题:SpringCloud Alibaba之Canal ( 数据同步

          本文链接:https://www.haomeiwen.com/subject/kuglvhtx.html