手绘风格的网站,代发关键词排名包收录,图书馆网站建设需求方案,北京网站制作建设基本介绍
Canal介绍#xff1a;Canal 是用 Java 开发的基于数据库增量日志解析#xff0c;提供增量数据订阅消费的中间件#xff08;数据库同步需要阿里的 Otter 中间件#xff0c;基于 Canal#xff09;。
Canal背景#xff1a;阿里巴巴 B2B 公司#xff0c;因为…基本介绍
Canal介绍Canal 是用 Java 开发的基于数据库增量日志解析提供增量数据订阅消费的中间件数据库同步需要阿里的 Otter 中间件基于 Canal。
Canal背景阿里巴巴 B2B 公司因为业务的特性卖家主要集中在国内买家主要集中在国外所以衍生出了同步杭州和美国异地机房的需求从 2010 年开始阿里系公司开始逐步的尝试基于数据库的日志解析获取增量变更进行同步由此衍生出了增量订阅消费的业务。
canal的工作原理是将自己伪装成mysql的slave节点来订阅mysql binlog的变更所以在配置启动canal前需要先配置mysql。
Canal是基于mysql的主从同步来实现的MySQL主从同步的原理如下 1MySQL master 将数据变更写入二进制日志( binary log其中记录的数据叫做binary log events 2MySQL slave 将 master 的 binary log events拷贝到它的中继日志(relay log) 3MySQL slave 重放 relay log 中事件将数据变更反映它自己的数据
而Canal就是把自己伪装成MySQL的一个slave节点从而监听master的binary log变化。再把得到的变化信息通知给Canal的客户端进而完成对其它数据库的同步。
安装配置MySQL
安装mysql
docker run \--name mysql \-e MYSQL_ROOT_PASSWORDroot \-p 3306:3306 \-v /mysql/conf/myLocal.cnf:/etc/mysql/conf.d \-v /mysql/data:/var/lib/musql \-d \mysql:5.7.25docker run \ # 创建并运行一个容器--name mysql \ # 给容器个名字叫mysql-e MYSQL_ROOT_PASSWORDroot \ # 设置mysql登录密码为root-p 3306:3306 # 把宿主机3306端口和容器的3306端口相关联-v /mysql/conf/myLocal.cnf:/etc/mysql/conf.d \ # 宿主myLocal.cnf文件挂载到容器conf.d文件-v /mysql/data:/var/lib/musql \ # 宿主data目录挂载到容器mysql目录-d \ # 后台运行mysql:5.7.25 # 需要启动的镜像名称 修改配置文件
打开mysql容器挂载的日志文件比如我的在/tmp/mysql/conf目录。对my.cnf进行修改添加以下内容
log-bin/var/lib/mysql/mysql-bin
binlog-do-dbheima
配置解读 log-bin/var/lib/mysql/mysql-bin设置binary log文件的存放地址和文件名叫做mysql-bin binlog-do-dbheima指定对哪个database记录binary log events这里记录heima这个库
最终效果
[mysqld]
skip-name-resolve
character_set_serverutf8
datadir/var/lib/mysql
server-id1000
log-bin/var/lib/mysql/mysql-bin
binlog-do-dbheima
设置用户权限 接下来添加一个仅用于数据同步的账户出于安全考虑这里仅提供对heima这个库的操作权限。
create user canal% IDENTIFIED by canal;
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO canal% identified by canal;
FLUSH PRIVILEGES; 然后重启MySQL
安装Canal
创建网络
需要创建一个网络将MySQL、Canal、MQ放到同一个Docker网络中
docker network create heima
让mysql加入这个网络
docker network connect heima mysql
安装运行Cannal
拉取Canal的镜像文件
docker pull canal/canal-server:v1.1.5
然后运行命令创建Canal容器
docker run -p 11111:11111 --name canal \
-e canal.destinationsheima \
-e canal.instance.master.addressmysql:3306 \
-e canal.instance.dbUsernamecanal \
-e canal.instance.dbPasswordcanal \
-e canal.instance.connectionCharsetUTF-8 \
-e canal.instance.tsdb.enabletrue \
-e canal.instance.gtidonfalse \
-e canal.instance.filter.regexheima\\..* \
--network heima \
-d canal/canal-server:v1.1.5
说明: -p 11111:11111这是canal的默认监听端口 -e canal.instance.master.addressmysql:3306数据库地址和端口如果不知道mysql容器地址可以通过docker inspect 容器id来查看 -e canal.instance.dbUsernamecanal数据库用户名 -e canal.instance.dbPasswordcanal 数据库密码 -e canal.instance.filter.regex要监听的表名称
表名称监听支持的语法
mysql 数据解析关注的表Perl正则表达式. 多个正则之间以逗号(,)分隔转义符需要双斜杠(\\) 常见例子
1. 所有表.* or .*\\..*2. canal schema下所有表 canal\\..*3. canal下的以canal打头的表canal\\.canal.*4. canal schema下的一张表canal.test15. 多个规则组合使用然后以逗号隔开canal\\..*,mysql.test1,mysql.test2