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模式:
docker canal-server canal-adapter mysql_第1张图片

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

说明 database table
源数据库 mytest1 user
目标数据库 mytest2 user

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
docker canal-server canal-adapter mysql_第2张图片
停止正在运行的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 canal-adapter mysql_第3张图片
至此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
docker canal-server canal-adapter mysql_第4张图片
修改拷贝出来的mytest_user.yml

docker canal-server canal-adapter mysql_第5张图片
停止正在运行的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-server canal-adapter mysql_第6张图片
至此docker安装canal-adapter完成

5.验证数据同步

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

你可能感兴趣的:(mysql,docker,docker,mysql,canal-server,canal-adapter)