当前位置:   article > 正文

微服务框架 SpringCloud微服务架构 多级缓存 49 缓存同步 49.2 安装 Canal_springcloud canal

springcloud canal

微服务框架

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】

多级缓存

49 缓存同步

49.2 安装 Canal
49.2.1 初识Canal

Canal [kə’næl],译意为水道/管道/沟渠,canal是阿里巴巴旗下的一款开源项目,基于Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。

GitHub的地址:https://github.com/alibaba/canal

在这里插入图片描述

Canal是基于mysql的主从同步来实现的,MySQL主从同步的原理如下:

在这里插入图片描述

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

上面就是 MySQL 主从同步的原理

Canal就是把自己伪装成MySQL的一个slave节点,从而监听master的binary log变化。再把得到的变化信息通知给Canal的客户端,进而完成对其它数据库的同步。

在这里插入图片描述

49.2.2 安装和配置 Canal

黑马 老师也给了课前资料

在这里插入图片描述

牛逼!!!!!!

【开启MySQL 主从】

Canal是基于MySQL的主从同步功能,因此必须先开启MySQL的主从功能才可以。

这里以之前用Docker运行的mysql为例:

[开始binlog]

打开mysql容器挂载的日志文件,黑马老师的在/tmp/mysql/conf目录:【当然我的也在】

在这里插入图片描述

修改文件:

vi /tmp/mysql/conf/my.cnf
  • 1

添加内容:

log-bin=/var/lib/mysql/mysql-bin
binlog-do-db=heima
  • 1
  • 2

配置解读:

  • log-bin=/var/lib/mysql/mysql-bin:设置binary log文件的存放地址和文件名,叫做mysql-bin
  • binlog-do-db=heima:指定对哪个database记录binary log events,这里记录heima这个库

最终效果:

[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000
log-bin=/var/lib/mysql/mysql-bin
binlog-do-db=heima
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

在这里插入图片描述

OK ,保存

重启MySQL 容器 docker restart mysql

在这里插入图片描述

OK

看看mysql 的data 目录【笔者重装了 一下】

在这里插入图片描述

这就是那个 二进制文件, 000001 是文件的编号

[设置用户权限]

接下来添加一个仅用于数据同步的账户,出于安全考虑,这里仅提供对heima这个库的操作权限。

create user canal@'%' IDENTIFIED by 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%' identified by 'canal';
FLUSH PRIVILEGES;
  • 1
  • 2
  • 3

在这里插入图片描述

在这里插入图片描述

OK

重启mysql容器即可

docker restart mysql
  • 1

在这里插入图片描述

测试设置是否成功:在mysql控制台,或者Navicat中,输入命令:

show master status;
  • 1

在这里插入图片描述

  • File: bin-log 的名称
  • Position:原来log 的偏移量
  • 接着就是数据库的名称

【安装Canal】

[创建网络]

我们需要创建一个网络,将MySQL、Canal、MQ放到同一个Docker网络中:

docker network create heima
  • 1

让mysql加入这个网络:

docker network connect heima mysql
  • 1

在这里插入图片描述

OK

[安装 Canal]

课前资料中提供了canal的镜像压缩包:【课前资料,永远滴神!!!!】

在这里插入图片描述

大家可以上传到虚拟机,

笔者就放在 tmp 目录下吧

在这里插入图片描述

800 多M ,好家伙

在这里插入图片描述

还是用Xftp 吧,finalshell 也太不稳定了

在这里插入图片描述

OK,传过去 了

然后通过命令导入:

docker load -i canal.tar
  • 1

在这里插入图片描述

OK,查看所有镜像

在这里插入图片描述

然后运行命令创建Canal容器:

docker run -p 11111:11111 --name canal \
-e canal.destinations=heima \
-e canal.instance.master.address=mysql:3306  \
-e canal.instance.dbUsername=canal  \
-e canal.instance.dbPassword=canal  \
-e canal.instance.connectionCharset=UTF-8 \
-e canal.instance.tsdb.enable=true \
-e canal.instance.gtidon=false  \
-e canal.instance.filter.regex=heima\\..* \
--network heima \
-d canal/canal-server:v1.1.5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

开个端口

在这里插入图片描述

在这里插入图片描述

OK

说明:

  • -p 11111:11111:这是canal的默认监听端口
  • -e canal.instance.master.address=mysql:3306:数据库地址和端口,如果不知道mysql容器地址,可以通过docker inspect 容器id来查看
  • -e canal.instance.dbUsername=canal:数据库用户名
  • -e canal.instance.dbPassword=canal :数据库密码
  • -e 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 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/85656
推荐阅读
相关标签
  

闽ICP备14008679号