docker canal-server canal-adapter mysql

本文将介绍使用docker安装配置canal-server、canal-adapter,并将MySQL的数据同步到MySQL。
本教程中的canal-mode为tcp,若换成其他如kafka、rocketMQ,大同小异。

1.canal介绍

canal的工作原理就是把自己伪装成MySQL slave,模拟MySQL slave的交互协议向MySQL Mater发送 dump协议,MySQL mater收到canal发送过来的dump请求,开始推送binary log给canal,然后canal解析binary log,再发送到存储目的地,比如MySQL,Kafka,Elastic Search等等。

2.前期准备

1.MySQL的安装

2.为canal-server添加用户

安装好MySQL之后添加一个用户,用于canal-server使用。

-- 创建用户 用户名:canal 密码:Canal@123456
create user 'canal'@'%' identified by 'Canal@123456';
-- 授权 *.*表示所有库
grant SELECT, REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'canal'@'%' identified by 'Canal@123456';

3.开启MySQL的binlog

下一步在MySQL配置文件my.cnf设置如下信息:

[mysqld]
# 打开binlog
log-bin=mysql-bin
# 选择ROW(行)模式
binlog-format=ROW
# 配置MySQL replaction需要定义,不要和canal的slaveId重复
server_id=1

改了配置文件之后,重启MySQL,使用命令查看是否打开binlog模式:
在这里插入图片描述

4.创建两个数据库表,用于本次数据同步的测试

说明databasetable
源数据库mytest1user
目标数据库mytest2user

user表结构都是:id,name

至此MySQL服务器准备完成.

3.docker安装canal-server

去docker hub上找到canal-server镜像,我这里使用canal/canal-server:latest

#拉取镜像
docker pull canal/canal-server:latest
#第一次运行
docker run --name canal-server -p 11111:11111 -d canal/canal-server:latest

这次运行的目的是为了找到配置文件instance.properties的目录,然后把配置文件挂载出来,方便之后在容器之外修改。

root@ubuntu:/opt/canal-adapter/conf# docker exec -it canal-server bash
[root@53b382d287 admin]# ls
app.sh  bin  canal-server  health.sh  node_exporter  node_exporter-0.18.1.linux-arm64
[root@53b382d287 admin]# cd canal-server/
[root@53b382d287 canal-server]# ls
bin  conf  lib  logs  plugin
[root@53b382d287 canal-server]# cd conf/
[root@53b382d287 conf]# ls
canal_local.properties  canal.properties  example  logback.xml  metrics  spring
[root@53b382d287 conf]# cd example/
[root@53b382d287 example]# ls
h2.mv.db  instance.properties  meta.dat
[root@53b382d287 example]# pwd
/home/admin/canal-server/conf/example

创建文件夹,我这里的路径是/opt/canal-server

#创建文件夹
mkdir /opt/canal-server
#进入目录
cd /opt/canal-server
#将instance.properties从容器中拷贝出来
docker cp canal-server:/home/admin/canal-server/conf/example/instance.properties ./

修改拷贝出来的instance.properties
在这里插入图片描述
停止正在运行的canal-server,并删除容器,重新运行canal-server

#停止容器
docker stop canal-server
#删除容器
docker rm canal-server
#重新运行canal-server,使用挂载出来的配置文件
docker run --name canal-server -p 11111:11111 -v /opt/canal-server:/home/admin/canal-server/conf/example -d canal/canal-server:latest

查看canal-server是否运行成功
在这里插入图片描述
至此docker安装canal-server完成

4.docker安装canal-adapter

同样去docker hub上找到canal-adapter镜像,我这里使用slpcat/canal-adapter:v1.1.5

#拉取镜像
docker pull slpcat/canal-adapter:v1.1.5
#第一次运行
docker run --name canal-adapter -p 8081:8081 -d slpcat/canal-adapter:v1.1.5

这次运行的目的是为了找到配置文件application.yml、mytest_user.yml的目录,然后把配置文件挂载出来,方便之后在容器之外修改。

root@ubuntu:/opt/canal-server# docker exec -it canal-adapter bash
root@07e46971cd:/opt/canal-adapter# ls
bin  conf  lib	logs  plugin
root@07e46971cd:/opt/canal-adapter# cd conf/
root@07e46971cd:/opt/canal-adapter/conf# ls
application.yml  rdb
root@07e46971cd:/opt/canal-adapter/conf# pwd
/opt/canal-adapter/conf
root@07e46971cd:/opt/canal-adapter/conf# cd rdb/
root@07e46971cd:/opt/canal-adapter/conf/rdb# ls
mytest_user.yml
root@07e46971cd:/opt/canal-adapter/conf/rdb# pwd
/opt/canal-adapter/conf/rdb
root@07e46971cd:/opt/canal-adapter/conf/rdb# 

创建文件夹,我这里的路径是/opt/canal-adapter/conf、/opt/canal-adapter/conf/rdb

#创建conf文件夹
mkdir /opt/canal-adapter/conf
#创建rdb文件夹
mkdir /opt/canal-adapter/conf/rdb
#进入conf目录
cd /opt/canal-adapter/conf
#将 application.yml 从容器中拷贝到conf文件夹
docker cp canal-adapter:/opt/canal-adapter/conf/application.yml ./
#进入rdb文件夹
cd  /opt/canal-adapter/conf/rdb
#将 mytest_user.yml 从容器中拷贝到rdb文件夹
docker cp canal-adapter:/opt/canal-adapter/conf/rdb/mytest_user.yml ./

修改拷贝出来的application.yml
在这里插入图片描述
修改拷贝出来的mytest_user.yml

在这里插入图片描述
停止正在运行的canal-adapter,并删除容器,重新运行canal-adapter

#停止容器
docker stop canal-adapter
#删除容器
docker rm canal-adapter
#重新运行canal-adapter,使用挂载出来的配置文件
docker run --name canal-adapter -p 8081:8081 -v /opt/canal-adapter/conf:/opt/canal-adapter/conf -v /opt/canal-adapter/conf/rdb:/opt/canal-adapter/conf/rdb -d slpcat/canal-adapter:v1.1.5

查看canal-adapter是否运行成功
在这里插入图片描述
至此docker安装canal-adapter完成

5.验证数据同步

在源数据库表mytest1.user中新增数据,在目标数据库表mytest2.user中刷新将看到数据已经自动同步。在canal-adapter的日志中也可以查看到数据同步信息

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值